Maison > développement back-end > Golang > Comment arrêter gracieusement les Goroutines après un temps défini en utilisant le contexte ?

Comment arrêter gracieusement les Goroutines après un temps défini en utilisant le contexte ?

Barbara Streisand
Libérer: 2024-11-20 14:48:18
original
857 Les gens l'ont consulté

How to Gracefully Stop Goroutines After a Set Time Using Context?

Comment arrêter les Goroutines après une durée spécifiée en utilisant le contexte

Contexte du problème

Dans les tests de charge, où de nombreux appels HTTP sont orchestrés dans les goroutines, cela devient crucial pour contrôler la durée d’exécution de ces routines. Cela permet aux utilisateurs de terminer le test de charge à une heure prédéfinie.

Une approche qui a échoué

Une tentative courante pour y parvenir consiste à utiliser des goroutines pour surveiller les durées de time.Sleep() et diffuser les signaux de fin. via les canaux. Bien que cette méthode puisse suffire dans certains cas, elle échoue lorsque les goroutines continuent d'effectuer des appels HTTP en dehors de la goroutine principale.

La solution : utiliser des contextes

Go 1.7 introduit le package de contexte essentiel pour résoudre ce problème. . Les contextes fournissent un moyen structuré d'annuler et de surveiller l'exécution des goroutines, offrant une solution fiable pour la terminaison temporelle.

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("used:", time.Since(t))
}

func main() {
    ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond)
    test(ctx)
}
Copier après la connexion

Explication :

  1. À l'intérieur de la fonction de test, un contexte avec un délai d'attente de 50 millisecondes est créé.
  2. Une instruction select vérifie si le canal time.After a un événement (indiquant la fin de la mise en veille) ou si le le contexte a été annulé.
  3. Lorsque le contexte expire, l'instruction select se termine, indiquant que la goroutine a été annulée.

Cette approche garantit que les goroutines sont annulées à l'heure spécifiée est passé, quel que soit leur emplacement dans le code.

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