首頁 > 後端開發 > Golang > 主體

HTTP 回應傳送後我的 Goroutine 會完成嗎?

Barbara Streisand
發布: 2024-11-25 21:38:14
原創
659 人瀏覽過

Will My Goroutine Finish After the HTTP Response is Sent?

HTTP 處理程序內的 Goroutine 執行

在 HTTP 處理程序內執行 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)
}
登入後複製

此程式碼在 HomeHandler 中啟動一個 goroutine,該 goroutine 在列印完成之前休眠 10 秒。一旦寫入回應,主協程就會從 HomeHandler 函數傳回。

Goroutine 會完成嗎?

在這個特定場景中,goroutine 確實會完成其執行,列印語句「worker開始」和「工作人員已完成」到控制台。這是因為:

  • goroutine 作為單獨的執行緒啟動,獨立於處理 HTTP 請求的主 goroutine。
  • worker 函數是一個輕量級線程,它不會消耗大量資源,所以不太可能因為系統資源限製而停止。
  • main goroutine 只從 HomeHandler 函數傳回,而不是從main() 函式。這意味著程式繼續在後台運行,讓 goroutine 完成執行。

在這種情況下提前終止goroutine 的唯一方法就是遇到不穩定的狀態,例如正在運行記憶體不足,或者使用同步技術明確停止goroutine(本程式碼範例中未涵蓋) 。

以上是HTTP 回應傳送後我的 Goroutine 會完成嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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