當 Go 程式中主 Goroutine 或父 Goroutine 退出時,未完成的 Goroutine 將面臨突然結束。整個運行時系統關閉,沒有空間讓它們繼續運作、等待或取消。這種現象就像閃光紙瞬間點燃又消失。
Go程式設計書中給出的程式碼片段中,mirroredQuery返回時,如果主goroutine退出,那麼兩個慢goroutine將不復存在立即,無論他們當前的狀態如何。這可以認為是goroutine洩漏,但由於整個進程終止,分配的資源會自動清理。
但是,如果mirroredQuery返回後主goroutine仍在運行,則未完成的goroutines將繼續運行,直到他們:
在這種情況下,他們會將響應發送到通道然後返回。一旦所有 goroutine 返回,通道將保留響應作為次要資源洩漏。但由於沒有剩餘的對通道的引用,它最終將與其包含的字串一起被垃圾收集。
在這種情況下使用緩衝通道可確保 goroutine 不會阻塞並繼續運行,直到它們完成為止。能夠完成他們的任務。在無緩衝通道的情況下,失敗的 goroutine 將阻塞,導致通道及其資源無限期地保持分配狀態。
以上是當父 Goroutine 退出時,未完成的 Goroutines 會發生什麼事?的詳細內容。更多資訊請關注PHP中文網其他相關文章!