L'importance de time.sleep dans le maintien de l'exécution de Goroutine
Dans le domaine de la programmation Go, les goroutines offrent un mécanisme puissant pour l'exécution simultanée. Cependant, des questions se posent lorsque certaines goroutines ne s'exécutent pas comme prévu lorsque time.sleep est exclu.
Le code et l'observation
Considérez l'extrait de code suivant du didacticiel Go. :
package main import ( "fmt" "time" ) func say(s string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") }
Lorsqu'il est exécuté avec time.sleep, ce code produit le résultat attendu, où "world" et "hello" sont écrit à l’écran de manière interchangeable cinq fois. Cependant, commenter time.sleep conduit à un résultat inattendu : seul « bonjour » est imprimé cinq fois.
Le rôle de time.sleep
Le rôle central de time.sleep consiste à fournir à la goroutine la possibilité de s'exécuter. Sans sommeil, le planificateur de goroutine reste en sommeil, empêchant le goroutine say("world") de prendre le contrôle.
La nature non préemptive de la planification de goroutine
Contrairement à la plupart Systèmes d'exploitation multitâches, le planificateur goroutine de Go n'est pas préemptif. Cela signifie que les goroutines ne seront pas interrompues et ne céderont pas le contrôle à moins qu'elles ne le demandent explicitement.
La nécessité d'un contrôle du rendement
En l'absence de temps de sommeil, le principal goroutine monopolise le contrôle et s'exécute cinq fois sans y renoncer. Une fois terminé, le programme se termine car il n'y a pas de goroutines actives pour le maintenir.
Conclusion
L'inclusion de time.sleep garantit que la goroutine secondaire n'est pas affamée d'opportunité d'exécution. Il permet au planificateur de basculer le contrôle entre les goroutines, ce qui entraîne le comportement concurrent souhaité. Par conséquent, comprendre le rôle de time.sleep dans le maintien de l’exécution des goroutines est crucial pour exploiter tout le potentiel des fonctionnalités de concurrence de Go.
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!