Comprendre le rôle de time.sleep dans l'exécution de Goroutine
Dans Go, les goroutines sont des threads légers qui s'exécutent simultanément. Bien que la combinaison de goroutines avec la communication par canal fournisse des primitives de concurrence robustes, certains scénarios nécessitent l'utilisation de fonctions de blocage comme time.sleep pour éviter la famine et garantir l'équité de l'exécution.
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") }
Une fois exécuté, ce code imprime cinq fois « bonjour » et « monde » de manière interchangeable sur l'écran. Cependant, si time.Sleep est commenté, seul "hello" sera imprimé. Ce comportement met en évidence l'importance du temps. Dormir lors de l'exécution d'une goroutine.
Le planificateur d'exécution Go n'est pas préemptif. Cela signifie que les goroutines doivent volontairement abandonner le contrôle pour permettre à d'autres goroutines de s'exécuter. Une façon de libérer le contrôle est d'utiliser time.Sleep.
Dans l'extrait de code ci-dessus, si time.Sleep est supprimé, la goroutine "hello" s'exécutera pendant cinq itérations sans donner aucune opportunité à la goroutine "world". à exécuter. En conséquence, lorsque la goroutine « bonjour » se termine, le programme se termine en raison de l'absence de toute autre goroutine qui le maintient en vie.
Par conséquent, le temps. Le sommeil joue un rôle crucial pour garantir l'équité dans la planification des goroutines. En introduisant de courts délais dans l'exécution de goroutines spécifiques, cela permet à d'autres goroutines d'être exécutées et évite la famine ou la famine complète d'autres goroutines.
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!