Comment expirer les Goroutines dans Go pour contrôler le temps d'exécution
Les Goroutines, partie intégrante de la concurrence Go, permettent une exécution asynchrone des tâches. Cependant, il est parfois nécessaire de contrôler la durée de ces routines et d'empêcher leur exécution indéfiniment.
Contexte et problème
Dans votre outil de test de charge, vous souhaitez terminez les goroutines après une heure spécifiée pour limiter la durée du processus d'appel HTTP. L'approche actuelle utilisant time.Sleep() au sein d'une goroutine crée un canal de communication, mais elle entraîne l'arrêt prématuré des goroutines.
Solution utilisant le contexte
Une plus L'approche recommandée implique l'utilisation du package golang.org/x/net/context (disponible dans la bibliothèque standard de Go 1.7 ), en particulier l'interface context.Context. Le contexte fournit un mécanisme pour annuler ou expirer les goroutines.
L'extrait de code suivant illustre cette solution :
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) }
Dans ce 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!