So überschreiten Sie Goroutinen in Go, um die Ausführungszeit zu steuern
Goroutinen, ein integraler Bestandteil der Go-Parallelität, ermöglichen die asynchrone Ausführung von Aufgaben. Manchmal ist es jedoch notwendig, die Dauer dieser Routinen zu kontrollieren und zu verhindern, dass sie auf unbestimmte Zeit ausgeführt werden.
Hintergrund und Problem
In Ihrem Lasttest-Tool möchten Sie dies tun Beenden Sie Goroutinen nach einer bestimmten Zeit, um die Dauer des HTTP-Aufrufprozesses zu begrenzen. Der aktuelle Ansatz, bei dem time.Sleep() innerhalb einer Goroutine verwendet wird, schafft einen Kommunikationskanal, führt jedoch zu einer vorzeitigen Beendigung von Goroutinen.
Lösung mit Kontext
Ein weiteres Der empfohlene Ansatz umfasst die Verwendung des Pakets golang.org/x/net/context (verfügbar in der Standardbibliothek in Go 1.7), insbesondere der Schnittstelle context.Context. Kontext bietet einen Mechanismus zum Abbrechen oder Zeitüberschreiten von Goroutinen.
Der folgende Codeausschnitt demonstriert diese Lösung:
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) }
In diesem Code:
Das obige ist der detaillierte Inhalt vonWie kann man Goroutinen in Go elegant aussetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!