Maison > développement back-end > Golang > Comment `time.Sleep()` empêche-t-il la famine de Goroutine dans Go ?

Comment `time.Sleep()` empêche-t-il la famine de Goroutine dans Go ?

Susan Sarandon
Libérer: 2024-12-03 09:42:10
original
318 Les gens l'ont consulté

How Does `time.Sleep()` Prevent Goroutine Starvation in Go?

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal