首頁 > 後端開發 > Golang > HTTP 處理程序中啟動的 Goroutine 是否總是在發送回應後完成?

HTTP 處理程序中啟動的 Goroutine 是否總是在發送回應後完成?

Barbara Streisand
發布: 2024-11-25 17:27:13
原創
1006 人瀏覽過

Will a Goroutine Launched in an HTTP Handler Always Finish After the Response is Sent?

HTTP 處理程序中的Goroutine 執行

問題:

在提供的範例程式碼中,其中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 可能無法完成的唯一場景分別是:

  • 如果 main 函數退出並終止整個程式。
  • 如果程式遇到致命錯誤,例如記憶體不足。

以上是HTTP 處理程序中啟動的 Goroutine 是否總是在發送回應後完成?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板