L'article d'aujourd'hui partagera avec vous les 27 causes du gopark. Pour faciliter la lecture, nous expliquerons selon les catégories.
Première partie
Logo |
Signification |
waitReasonZero |
Aucun |
waitReasonGCAssistMarking |
Marquage d'assistance GC |
waitReasonIOWait |
IO wait |
- waitReasonZero : Aucune explication officielle, à en juger par l'utilisation. Principalement utilisé dans deux scénarios : veiller et verrouiller.
- waitReasonGCAssistMarking : La phase de marquage auxiliaire GC provoquera une attente bloquante.
- waitReasonIOWait : Lorsque IO est bloqué et en attente, par exemple : demande réseau, etc.
Partie 2
Logo |
Signification |
waitReasonChanReceiveNilChan |
chan recevoir (n il chan) |
waitReasonChanSendNilChan |
chan send (nil chan) |
- waitReasonChanReceiveNilChan : Lire les opérations sur les canaux non initialisés.
- waitReasonChanSendNilChan : opération d'écriture sur un canal non initialisé.
Partie 3
Logo |
Signification |
waitReasonDumpingHeap |
dumping tas |
waitReasonGarbageCollection |
collecte des ordures |
waitReasonGarbageCollectionScan |
analyse de la collecte des ordures |
- waitReasonDumpingHeap : lors du vidage du tas Go Heap, ce scénario d'utilisation n'est bloqué que pendant runtime.debug, qui est le type de collection pprof courant.
- waitReasonGarbageCollection : Déclenché lors du garbage collection, le scénario principal est la phase GC Mark Termination.
- waitReasonGarbageCollectionScan : lors de l'analyse du garbage collection, le scénario principal est déclenché lorsque la marque GC (GC Mark) analyse l'étape racine.
Partie 4
Logo |
Signification |
waitReasonPanicWait |
panicwait |
waitReasonSelect |
select |
waitReasonSelectNoCases |
select (aucun cas) |
- waitReasonPanicWait : Déclenché lorsqu'une panique se produit dans la goroutine principale.
- waitReasonSelect : déclenché lors de l'appel du mot-clé select.
- waitReasonSelectNoCases : Lors de l'appel du mot-clé select, s'il n'y a aucun cas, il sera déclenché directement.
Partie 5
Logo |
Signification |
waitReasonGCAssistWait |
GC assist wait |
waitReasonGCScavengeWait |
GC balayage wait |
waitReasonGCScavengeWait |
GC récupération, attendez |
- waitReasonGCAssistWait : Le comportement de fin dans la phase de marquage auxiliaire GC sera déclenché.
- waitReasonGCSweepWait : Le comportement de fin de la phase de balayage GC sera déclenché.
- waitReasonGCScavengeWait : Le comportement de fin de la phase de récupération du GC sera déclenché. GC Scavenge est principalement un garbage collection du nouvel espace. Il s'agit d'un GC rapide et fréquemment exécuté qui est responsable du nettoyage des objets plus petits du nouvel espace.
Partie 6
Logo |
Signification |
waitReasonChanReceive |
chan recevoir |
waitReasonChanSend |
chan send |
waitReasonFinalizerWait |
finalizer wait |
- waitReasonChanReceive : l'opération de lecture sur le canal se déclenchera.
- waitReasonChanSend : Déclenché lors de l'écriture dans le canal.
- waitReasonFinalizerWait : Déclenché à la fin du finaliseur. Dans un programme Go, vous pouvez définir une fonction de finaliseur pour un objet en appelant la fonction
runtime.SetFinalizer
. Ce comportement correspond au recyclage provoqué par la phase finale.
Partie 7
logo |
signification |
waitReasonForceGCIdle |
force gc (idle) |
waitReasonSemacquire |
semacquire |
waitReasonSleep |
dormir |
- waitReasonForceGCIdle : Déclenché à la fin du GC (temps d'inactivité) forcé.
- waitReasonSemacquire : Déclenché à la fin du traitement du sémaphore.
- waitReasonSleep : comportement de sommeil classique, sera déclenché.
Partie 8
Logo |
Signification |
waitReasonSyncCondWait |
sync.Cond.Wait |
waitReasonTimerGoroutineIdle |
timer goroutine (inactif) |
waitReasonTraceReaderBlocked |
lecteur de trace (bloqué) |
- waitReasonSyncCondWait : Déclenché lorsqu'il est combiné avec la méthode
sync.Cond
用法能知道,是在调用 sync.Wait
.
- waitReasonTimerGoroutineIdle : lié au Timer, il sera déclenché lorsqu'aucun timer n'aura besoin d'effectuer des tâches.
- waitReasonTraceReaderBlocked : lié à Trace, ReadTrace renverra les données de trace binaires et bloquera jusqu'à ce que les données soient disponibles.
Partie 9
Logo |
Signification |
waitReasonWaitForGCCycle |
attendre le cycle GC |
waitReasonGCWorkerIdle |
Travailleur GC (inactif) |
waitReasonPreempted |
préempté |
waitReasonDebugCall |
appel de débogage |
- waitReasonWaitForGCCycle : En attendant le cycle GC, il se mettra en veille et provoquera un blocage.
- waitReasonGCWorkerIdle : lorsque le GC Worker est inactif, il se met en veille et provoque un blocage.
- waitReasonPreempted : lorsqu'une préemption d'appel cyclique se produit, elle se met en veille et attend la planification.
- waitReasonDebugCall : Déclenché lorsque GODEBUG est appelé.
Résumé
L'article d'aujourd'hui est un complément à l'explication détaillée de la fonction runtime.gopark au début. Nous pouvons comprendre ses facteurs inducteurs.
Les scènes principales sont :
- Collecte des ordures (GC).
- Autres, tels que : panique, finaliseur, sélection, etc.
Nous pouvons utiliser ces caractéristiques pour démonter les raisons qui peuvent provoquer un blocage. En fait, il n'est pas nécessaire de s'en souvenir. Ils provoqueront un blocage car il existe des facteurs qui affectent le flux de contrôle, ce qui conduira à l'appel de gopark.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!