Maison >développement back-end >Golang >Pourquoi « time.Sleep » permet-il l'exécution simultanée de Goroutine dans Go ?

Pourquoi « time.Sleep » permet-il l'exécution simultanée de Goroutine dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 15:40:10546parcourir

Why Does `time.Sleep` Enable Concurrent Goroutine Execution in Go?

Heure. Exécution de sommeil et de goroutine

Dans le code fourni, la fonction time.Sleep joue un rôle crucial en permettant l'exécution de goroutines simultanées. Lorsque time.Sleep est commenté, la goroutine « mondiale » n'a jamais la chance de s'exécuter.

La raison de ce comportement réside dans la nature non préemptive du planificateur de goroutine de Go. Contrairement aux planificateurs préemptifs, le planificateur Go n'oblige pas les goroutines en cours d'exécution à céder le contrôle à moins qu'elles n'y renoncent volontairement. Sans temps de sommeil, la goroutine principale monopolise le contrôle, complétant sa boucle say("hello") cinq fois avant de revenir. Puisque la goroutine principale est responsable de l'exécution du programme, le programme se termine immédiatement après, ne laissant pas le temps à la goroutine « mondiale » de s'exécuter.

Avec le temps. Dormez sur place, la goroutine « mondiale » peut s'exécuter pendant le goroutine principal attend. Lorsque la goroutine principale cède le contrôle pour exécuter time.Sleep, le planificateur peut passer à la goroutine "monde", lui permettant d'exécuter sa première itération avant la reprise de la goroutine principale. Cette alternance de contrôle entre les goroutines garantit que les deux tâches peuvent être terminées, ce qui entraîne l'impression du résultat attendu avec « monde » et « bonjour » à l'écran de manière interchangeable.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn