在Go Playground 上執行程式碼時,開發人員可能會遇到與在本機電腦上執行相同程式碼相比的差異。本文探討了行為差異,特別是在處理 goroutine 和同步機制時。
考慮以下Go 程式碼:
在Go Playground 上,此程式碼會產生錯誤:「進程花費的時間太長。
但是,在具有多個CPU 核心的本機電腦上執行相同的程式碼(GOMAXPROCS > 1) 會產生以下輸出:
這表示在主協程完成時,在其他協程中建立的協程也會終止。
Go 遊樂場和本地機器之間的不同行為可以歸因於可用處理器的數量。在 Go Playground 中,GOMAXPROCS 預設為 1,這意味著一次只能運行一個 Goroutine。因此,在上面的例子中,在 other 中創建的無盡 Goroutine 會阻止主 Goroutine 繼續運行。
相反,當本地運行多個 CPU 核心時,GOMAXPROCS 預設為可用核心數,允許多個 Goroutine同時運作。因此,在 other 中創建的無限 Goroutine 不會阻止主 Goroutine 退出。
Go 中 Goroutine 的行為取決於可用處理器的數量(GOMAXPROCS)。雖然 Go Playground 使用預設值 1,這可能會導致 goroutine 無限期運行的感覺,但在具有多個核心的本機電腦上運行相同的程式碼會提供不同的行為,其中 goroutine 可能會在主 goroutine 完成時終止。這種理解有助於開發人員避免誤解,並確保他們的程式碼在不同環境中按預期運行。
以上是為什麼 Go Playground 和本地機器上的 Goroutine 表現出行為差異?的詳細內容。更多資訊請關注PHP中文網其他相關文章!