問題:
在提供的範例程式碼中,其中goroutine 在其中,其中gorout處理程序(HomeHandler),即使伺服器回傳回應後,goroutine 也會始終完成執行客戶端?
範例程式碼:
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) }
答案:
是的,在worker中啟動的goroutine將完成它的工作在所有情況下執行。
Goroutines 是 Go 程式中的輕量級線程,不受主函數或 HTTP 處理程序執行的限制。它們將繼續並發運行,除非遇到錯誤或明確終止。在這種情況下,worker goroutine 是非同步啟動的,HomeHandler 函數在將回應寫入客戶端後立即傳回。即使在處理函數傳回並且伺服器發送回應之後,worker Goroutine 也會繼續執行,直到完成休眠 10 秒並列印完成訊息的任務。
goroutine 可能無法完成的唯一場景分別是:
以上是HTTP 處理程序中啟動的 Goroutine 是否總是在發送回應後完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!