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

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

DDD
Libérer: 2024-11-30 18:13:12
original
208 Les gens l'ont consulté

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

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")
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal