Go 提供了一系列機制來保持主Goroutine 無限期運作而不消耗處理能力。考慮以下策略:
不帶Cases 的選擇:透過不帶case 或default 子句的select 語句可以實現永遠阻塞而不消耗CPU:
從空接收Channel:主Goroutine 可以從空Channel 連續接收來無限期掛起:
從Nil Channel接收:類似地,接收從零通道產生相同的結果效果:
送到nil通道:送到nil通道也會永久掛起主goroutine:
鎖定預鎖定互斥體:鎖定已經鎖定的互斥體會有效地停止主goroutine:
為了促進優雅退出,專用的退出通道可以被利用。當需要終止程式時,關閉此通道:
在單獨的Goroutine 中,關閉退出通道會觸發主Goroutine 的退出:
如果目標是防止主goroutine 在不阻塞的情況下終止,則time.Sleep()函數可以使用足夠長的持續時間,上限約為 292 年:
對於延長的持續時間,請考慮合併上述 time.Sleep() 的無限循環:
以上是Go 中如何讓主 Goroutine 無限期運行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!