Quelle est la différence entre un convoi de verrouillage et un conflit de verrouillage/thread ?

Aug 18 2020

De wikipedia sur le convoi de verrouillage :

Un convoi de verrous se produit lorsque plusieurs threads de priorité égale se disputent à plusieurs reprises le même verrou. Contrairement aux situations d'interblocage et de livelock, les threads d'un convoi de verrous progressent ; cependant, chaque fois qu'un thread tente d'acquérir le verrou et échoue, il abandonne le reste de son quantum de planification et force un changement de contexte. La surcharge des changements de contexte répétés et la sous-utilisation des quanta de planification dégradent les performances globales.

De wikipedia sur le conflit de verrouillage/thread :

Conflit de verrou : cela se produit chaque fois qu'un processus ou un thread tente d'acquérir un verrou détenu par un autre processus ou thread. Plus les verrous disponibles sont précis, moins un processus/thread demandera un verrou détenu par l'autre. (Par exemple, verrouiller une ligne plutôt que le tableau entier, ou verrouiller une cellule plutôt que la ligne entière.) ;

Quelqu'un pourrait-il s'il vous plaît élaborer un peu plus sur ces deux choses? Pour moi, il semble qu'ils soient essentiellement les mêmes, ou s'ils ne le sont pas, alors la contention de verrouillage provoque sûrement un convoi de verrouillage. Est-ce le cas ou s'agit-il de concepts distincts et indépendants? De plus, je ne comprends pas la phrase "il abandonne le reste de son quantum de planification et force un changement de contexte".

Réponses

1 ajit Sep 03 2020 at 13:30

Il existe deux approches de blocage utilisées dans les algorithmes de verrouillage lorsqu'un verrou est occupé . tourner attendre ou bloquer (se mettre en veille, abandonner le processeur et attendre que le système d'exploitation réveille le thread et reprogramme). Verrouiller le convoi comme mentionné se produira lorsque la stratégie de blocage est utilisée.
Le système d'exploitation planifie les threads sur un cœur de manière découpée dans le temps . Chaque thread reçoit le processeur pendant une tranche de temps déterminée, disons 2 ms. OS dans un round-robinplanifiez tous les threads de la file d'attente un par un. Si, par exemple, un thread après avoir obtenu le calendrier et commencé son exécution, disons après 100 us, demandez un verrou. Si le verrou est occupé, le thread incapable d'obtenir le verrou, bloque et abandonne le processeur. La tranche de temps restante de 1,9 ms (2 ms-100 us) n'est donc pas utilisée par le thread. Même après avoir été réveillé par le système d'exploitation lorsque le verrou est libre, le thread doit attendre son tour dans la file d'attente à tour de rôle. Le nombre de threads actifs peut être en centaines.

Le conflit de verrouillage provoque un effet de convoi.