HTTP ハンドラー実行におけるゴルーチンの永続性
HTTP ハンドラー内でゴルーチンを開始するときに、一般的な懸念事項が生じます。応答が返された後にこれらのルーチンが完了するかどうかです。戻ってきた?これを明確にするために、コード例を分析してみましょう。
package main import ( "fmt" "net/http" "time" ) func worker() { fmt.Println("worker started") time.Sleep(time.Second * 10) fmt.Println("worker completed") } func HomeHandler(w http.ResponseWriter, r *http.Request) { go worker() w.Write([]byte("Hello, World!")) } func main() { http.HandleFunc("/home", HomeHandler) http.ListenAndServe(":8081", nil) }
この例では、ワーカー goroutine が HomeHandler 内で起動されます。応答が書き込まれると、次の質問が続きます: ワーカー ゴルーチンはまだ完了しますか?
答え:
はい、ワーカー ゴルーチンはすべての状況で完了します。
Goroutine は Golang の軽量スレッドです。開始されると、それらは独立して実行され、完了または終了するまで実行を続けます。この例では、ワーカー ゴルーチンは完了を妨げるような問題なく起動されています。
追加の考慮事項:
ゴルーチンが完了しない唯一の状況は、次のような場合です。 main 関数はプログラムの終了を意味するため、戻ります。同様に、メモリ枯渇などの極端な状況も不安定な状態につながり、ルーチンの完了が中断される可能性があります。ただし、ほとんどの場合、これらのシナリオは起こりそうにありません。
以上がHTTP ハンドラーで起動されたゴルーチンは常に応答の送信後に完了しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。