Maison > développement back-end > Golang > le corps du texte

Comment le package « context » de Go peut-il être utilisé pour expirer les goroutines ?

Susan Sarandon
Libérer: 2024-11-20 04:36:02
original
784 Les gens l'ont consulté

How Can Go's `context` Package Be Used to Timeout Goroutines?

Comment Go gère-t-il le délai d'attente des Goroutines ?

Question :

Vous créez un outil qui gère plusieurs appels HTTP dans des goroutines simultanées. Pour éviter un scénario d'exécution indéfini, vous cherchez un moyen d'annuler les goroutines après un laps de temps spécifique.

Solution :

Alors que l'approche de création d'une goroutine pour dormir pendant une durée spécifiée et l'envoi d'un message de diffusion pour annuler les autres goroutines semble logique, il semble y avoir un problème avec l'exécution des goroutines dans ce scénario.

Pour relever ce défi, envisagez d'exploiter le package de contexte dans Go . Il offre un moyen efficace de gérer les délais d'attente et l'annulation de contexte pour les goroutines.

Extrait de code :

Voici un exemple d'utilisation du package de contexte pour la gestion des délais d'attente des goroutines :

package main

import (
    "context"
    "fmt"
    "time"
)

func test(ctx context.Context) {
    t := time.Now()

    select {
    case <-time.After(1 * time.Second):
        fmt.Println("overslept")
    case <-ctx.Done():
        fmt.Println("cancelled")
    }
    fmt.Println("used:", time.Since(t))
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go test(ctx)

    // cancel context after 30 milliseconds
    time.Sleep(30 * time.Millisecond)
    cancel()
}
Copier après la connexion

Ce code crée un contexte avec un délai d'attente de 50 millisecondes. Une goroutine est ensuite lancée pour exécuter la fonction de test, en passant le contexte. Dans la fonction de test, une instruction select attend que le délai d'attente se produise ou que le contexte soit annulé. Après 30 millisecondes, le contexte est annulé, ce qui entraîne la fin de la goroutine et l'impression "annulé".

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