Maison > développement back-end > Golang > Comment terminer gracieusement plusieurs routines Go en utilisant le contexte ?

Comment terminer gracieusement plusieurs routines Go en utilisant le contexte ?

Susan Sarandon
Libérer: 2024-12-10 05:48:14
original
172 Les gens l'ont consulté

How to Gracefully Terminate Multiple Go Routines Using Context?

Comment synchroniser plusieurs routines Go avec le contexte

Pour synchroniser plusieurs goroutines, leur permettant de se terminer lorsque l'une d'elles revient, le contexte fournit un solution efficace.

Explication :

L'exemple de code crée deux goroutines. Pour les synchroniser, un contexte.Context est initié et fourni aux deux goroutines. Chaque goroutine entre dans une boucle select {}, écoutant les messages du contexte.

Lorsqu'une erreur se produit ou qu'une condition spécifique est remplie :

  1. Le principal goroutine appelle la fonction d'annulation associée au contexte.
  2. Cela envoie un message "terminé" au contexte.
  3. Tous les goroutines écoutant le contexte reçoivent ce message et se terminent.

Exemple de code :

package main

import (
    "context"
    "sync"
)

func main() {

    ctx, cancel := context.WithCancel(context.Background())
    wg := sync.WaitGroup{}
    wg.Add(3)
    go func() {
        defer wg.Done()
        for {
            select {
            // msg from other goroutine finish
            case <-ctx.Done():
                // end
            }
        }
    }()

    go func() {
        defer wg.Done()
        for {
            select {
            // msg from other goroutine finish
            case <-ctx.Done():
                // end
            }
        }
    }()

    go func() {
        defer wg.Done()
        // your operation
        // call cancel when this goroutine ends
        cancel()
    }()
    wg.Wait()
}
Copier après la connexion

Avantages de l'utilisation du contexte :

  • Contrôle centralisé : Évite le besoin de mécanismes de synchronisation explicites, en gardant le code clean.
  • Gestion des erreurs : Si une erreur se produit dans une goroutine, elle peut en informer d'autres goroutines à travers le contexte.
  • Résiliation gracieuse : Les Goroutines reçoivent un signal pour se terminer dès que possible, évitant ainsi d'éventuelles fuites de mémoire.

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