Heim > Artikel > Backend-Entwicklung > Wie kann man Goroutinen mithilfe des Kontexts nach einer festgelegten Zeit ordnungsgemäß stoppen?
Bei Lasttests, bei denen zahlreiche HTTP-Aufrufe in Goroutinen orchestriert werden, wird dies der Fall entscheidend, um die Ausführungsdauer dieser Routinen zu steuern. Dadurch können Benutzer den Auslastungstest zu einem vordefinierten Zeitpunkt beenden.
Ein häufiger Versuch, dies zu erreichen, besteht darin, Goroutinen zu verwenden, um die Dauer von time.Sleep() zu überwachen und Beendigungssignale zu senden über Kanäle. Während diese Methode in bestimmten Fällen ausreichen kann, schlägt sie fehl, wenn Goroutinen weiterhin HTTP-Aufrufe außerhalb der Haupt-Goroutine durchführen.
Go 1.7 führt das wesentliche Kontextpaket ein, um dieses Problem zu beheben . Kontexte bieten eine strukturierte Möglichkeit zum Abbrechen und Überwachen der Goroutine-Ausführung und bieten eine zuverlässige Lösung für die zeitbasierte Beendigung.
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) }
Erklärung:
Dieser Ansatz stellt sicher, dass Goroutinen abgebrochen werden, wenn die angegebene Zeit verstrichen ist, unabhängig von ihrer Position im Code.
Das obige ist der detaillierte Inhalt vonWie kann man Goroutinen mithilfe des Kontexts nach einer festgelegten Zeit ordnungsgemäß stoppen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!