Maison >développement back-end >Golang >Pourquoi `time.Sleep()` est-il crucial pour la bonne exécution de Goroutine dans Go ?

Pourquoi `time.Sleep()` est-il crucial pour la bonne exécution de Goroutine dans Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 11:58:13361parcourir

Why is `time.Sleep()` Crucial for Proper Goroutine Execution in 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!

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