Maison > Article > développement back-end > Comment terminer gracieusement une Goroutine en Go : signaler un arrêt ?
Comprendre la terminaison de Goroutine : signaler un arrêt
Les goroutines fournissent un mécanisme puissant pour l'exécution simultanée dans les programmes Go. Cependant, il devient crucial de gérer efficacement leur cycle de vie. Dans ce contexte, comprendre comment signaler à une goroutine d'arrêter de fonctionner est essentiel.
Dans l'extrait de code fourni, l'objectif est d'arrêter une goroutine basée sur un indicateur 'trop tard'. Cependant, cette approche est problématique car la lecture à partir d'un canal nul bloquera la goroutine.
Pour relever ce défi, une approche recommandée consiste à utiliser un canal supplémentaire spécifiquement pour la signalisation. Cela permet à la goroutine de surveiller et de répondre au signal d'arrêt de manière proactive. Considérez le code modifié suivant :
<code class="go">func main() { tooLate := make(chan struct{}) proCh := make(chan string) go func() { for { fmt.Println("Working") time.Sleep(1 * time.Second) select { case <-tooLate: fmt.Println("Stopped") return case proCh <- "processed": // Send if not timed out default: // Default ensures non-blocking behavior } fmt.Println("Done here") } }() select { case proc := <-proCh: fmt.Println(proc) case <-time.After(1 * time.Second): fmt.Println("Too late") close(tooLate) } time.Sleep(4 * time.Second) fmt.Println("Finish") }</code>
Dans cette implémentation mise à jour, « tooLate » est un canal de type « struct{} », qui est essentiellement une structure vide. La goroutine vérifie en permanence les données sur ce canal dans une instruction « select ». Lorsqu'une valeur est reçue (signalant qu'il est « trop tard »), la goroutine imprime « Stopped » et revient, se terminant effectivement.
De plus, dans l'instruction « select » dans le cas « proCh », en ajoutant une branche « par défaut » garantit que la goroutine ne peut pas bloquer. Ceci est crucial car le minuteur peut expirer une fois que la goroutine a déjà traité les données et les a envoyées sur le « proCh ».
Cette approche améliorée offre une méthode propre et fiable pour signaler à une goroutine de s'arrêter tout en conservant les avantages. d'exécution simultanée.
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!