Goroutine 協作調度和潛在的執行飢餓
Goroutine 是協作調度的,這意味著它們自願將執行讓給其他 goroutine。雖然這種方法通常可以確保公平性,但它提出了一個問題:避免讓步的 goroutines 是否可能會導致其他 goroutine 挨餓。
根據引用的部落格文章(http://blog.nindalf.com/how-goroutines) -work/),連續循環而不產生屈服的goroutine 確實會使同一線程上的其他goroutine 挨餓。特定執行緒上的 Goroutines 是多路復用的,這意味著即使遇到網路輸入、休眠或通道操作等阻塞操作,它們也不會阻塞執行緒。
例如,在給定程式碼中重複使用「sum」函數循環隨機次數,將數字相加並列印最終結果。如果使用「go」關鍵字產生多個這樣的goroutine(如範例所示),它們是否一一執行取決於以下因素:
因此,在沒有明確的讓出或觸發調度的函數呼叫的情況下,執行無限循環的 goroutine 可能會導致同一執行緒上的其他 goroutine 飢餓。然而,值得注意的是,Go 運行時會主動嘗試平衡 goroutine 執行並防止飢餓。
以上是Go 中連續運行的 Goroutine 會導致其他 Goroutine 挨餓嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!