Maison >développement back-end >Golang >Pourquoi `time.Sleep()` est-il crucial pour la bonne exécution de Goroutine dans Go ?
L'importance du temps. Dormir dans les Goroutines : garantir l'exécution
Dans Go, les goroutines permettent la programmation simultanée, permettant à plusieurs tâches de s'exécuter simultanément. Cependant, certains scénarios peuvent nécessiter l'utilisation de time.Sleep pour faciliter une bonne 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") }
Lorsque ce code est exécuté, "bonjour " et " monde " seront imprimés à l'écran de manière interchangeable cinq fois. Cependant, si time.Sleep est supprimé, seul "hello" sera imprimé cinq fois.
Pourquoi time.Sleep est-il crucial pour l'exécution des goroutines ? La réponse réside dans la nature non préemptive du planificateur Go. Les goroutines ne se préemptent pas, ce qui signifie qu'elles doivent explicitement céder le contrôle pour permettre aux autres goroutines de s'exécuter.
En l'absence de temps. Dormir, la goroutine principale (dites("hello")) n'abandonnera pas le contrôle , empêchant la goroutine say("world") de s'exécuter. En conséquence, seule la sortie de la goroutine principale est imprimée, et la deuxième goroutine est effectivement terminée lorsque la fonction main() revient.
Par conséquent, time.Sleep sert de limite d'élasticité, permettant à l'instruction say("world ") goroutine pour acquérir du temps CPU et exécuter son code. En introduisant un retard dans la goroutine principale, time.Sleep crée une opportunité pour la goroutine secondaire d'entrelacer ses opérations.
En conclusion, time.Sleep est essentiel dans certains scénarios de goroutine pour garantir que toutes les goroutines reçoivent le chance d'exécuter. Son utilisation comme limite d'élasticité évite les problèmes de préemption et permet à la programmation simultanée de fonctionner comme prévu.
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!