Goroutine-Ausführung in einem HTTP-Handler
Bei der Verwendung von Goroutinen innerhalb eines HTTP-Handlers wundert man sich natürlich über deren Abschlussstatus nach der Rückgabe der Antwort . Sehen wir uns den bereitgestellten Beispielcode an:
// Handler that starts a goroutine func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() // Starts a goroutine called "worker" w.Write([]byte("Hello, World!")) // Sends a response to the client }
Es stellt sich die Frage: Wird die „Worker“-Goroutine immer abgeschlossen, auch nachdem die HTTP-Antwort gesendet wurde?
Die Antwort
Ja, die „Worker“-Goroutine wird in allen Situationen abgeschlossen. Hier ist der Grund:
Goroutinen sind leichtgewichtige Threads, die gleichzeitig mit dem Hauptprogramm ausgeführt werden. Wenn Sie eine Goroutine mit „go“ starten, wird ihr ein Stapel zugewiesen und sie wird vorzeitig ausgeführt. Sobald die Goroutine erstellt ist, läuft sie unabhängig vom Hauptprogramm, auch nachdem die aktuelle Funktion (in diesem Fall der HomeHandler) zurückgekehrt ist.
Im bereitgestellten Beispiel beginnt die Goroutine unmittelbar nach dem Go-Worker mit der Ausführung () Linie. Es gibt eine Meldung aus, um seinen Start anzuzeigen, und schläft dann 10 Sekunden lang, bevor es eine Abschlussmeldung ausgibt.
Während die Goroutine ausgeführt wird, setzt die HomeHandler-Funktion die Ausführung fort und sendet die Antwort an den Client. Der Server markiert die Anfrage dann als abgeschlossen und kehrt zum Listener zurück, wo er auf weitere Anfragen wartet.
Da die „Worker“-Goroutine unabhängig vom Handler ist, läuft sie auch nach dem Senden der HTTP-Antwort weiter. Der Scheduler des Betriebssystems ermöglicht es ihm, die CPU mit anderen Goroutinen zu teilen, und schließlich beendet es seinen Ruhezustand und gibt die Abschlussmeldung aus.
Ausnahmefälle
Es gibt Es gibt nur wenige Ausnahmefälle, in denen eine Goroutine möglicherweise nicht abgeschlossen wird:
In stabilen und gut geschriebenen Programmen wie dem in Ihrem Beispiel wird jedoch erwartet, dass Goroutinen ihre Aufgaben erfolgreich abschließen.
Das obige ist der detaillierte Inhalt vonWerden Goroutinen in HTTP-Handlern immer abgeschlossen, nachdem die Antwort gesendet wurde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!