問題:無限循環Goroutine 阻塞HTTP 伺服器
在Go 中,當使用較少執行緒時,無限循環Goroutine 會阻塞其他Goroutine比可用的核心數,即使相應地設定了runtime.GOMAXPROCS。然而,當使用 net/http 套件時,這種行為會有所不同。
問:為什麼無限循環 goroutine 在幾次呼叫後會阻塞 HTTP 伺服器?
A: Go 運行時的排程器並不是完全搶佔式的。在您的範例中,無限循環不包含函數調用,從而防止調度程序進行幹預。這會導致一個執行緒持續處理循環,阻塞其他 goroutine,包括 HTTP 伺服器。
問:為什麼 runtime.LockOSThread() 無法解決問題?
A:runtime.LockOSThread() 旨在確保空迴圈在單獨的執行緒中運作。然而,調度程序的非搶佔性質使得這種方法在這種情況下無效。
解決方案:
以上是為什麼無限循環 Goroutine 會阻塞 Go HTTP Server?的詳細內容。更多資訊請關注PHP中文網其他相關文章!