Maison > développement back-end > Golang > Comment terminer gracieusement une Goroutine dans Go ?

Comment terminer gracieusement une Goroutine dans Go ?

Mary-Kate Olsen
Libérer: 2024-10-29 17:22:02
original
646 Les gens l'ont consulté

How to Gracefully Terminate a Goroutine in Go?

Tuer gracieusement une goroutine

Dans Go, les goroutines assurent la concurrence, permettant à plusieurs tâches de s'exécuter simultanément. Parfois, il devient nécessaire de mettre fin à une goroutine, par exemple lorsque nous devons arrêter correctement une application.

Considérez le code suivant :

<code class="go">func startsMain() {
    go main()
}

func stopMain() {
    //kill main
}

func main() {
    //infinite loop
}</code>
Copier après la connexion

Dans ce scénario, la goroutine principale s'exécute une boucle infinie, et nous souhaitons l'arrêter dans la fonction stopMain. Comment pouvons-nous y parvenir ?

La solution réside dans l’utilisation de canaux pour communiquer entre les goroutines. Voici un extrait de code amélioré :

<code class="go">var quit chan struct{}

func startLoop() {
    quit = make(chan struct{})
    go loop()
}

func stopLoop() {
    close(quit)
}

// BTW, you cannot call your function main, it is reserved
func loop() {
    for {
        select {
        case <-quit:
            return // better than break
        default:
            // do stuff. I'd call a function, for clarity:
            do_stuff()
        }
    }
}</code>
Copier après la connexion

Nous introduisons un canal de sortie de type struct{}, qui peut contenir une valeur de structure vide.

  • Dans startLoop, nous initialisons le quit canal et lançons la goroutine de boucle.
  • Dans stopLoop, nous fermons le canal de sortie, signalant à la goroutine de boucle d'arrêter.
  • Dans la goroutine de boucle, nous utilisons select avec un cas par défaut pour continuer vérifiez les signaux du canal de sortie. Lorsqu'un signal est reçu, la boucle se termine gracieusement.

Ce mécanisme nous permet de terminer gracieusement la boucle infinie en signalant la goroutine via le canal de sortie.

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