主 Goroutine 的困境:睡覺還是退出?
開發人員經常遇到需要保持 Go 專案持續運作的情況,就像永恆的火焰一樣,永遠不會消失。相反,在某些情況下,人們希望優雅地結束程式的執行。本文探討了適用於這些場景的選項。
「休眠」主 Goroutine
為了使主 Goroutine 處於休眠狀態,存在幾種結構,可以有效地阻止其執行,而無需消耗CPU資源。請考慮以下範例:
選擇不含大小寫的:
select{}
從空接收通道:
<-make(chan int)
從零通道接收:
<-(chan int)(nil)
傳送到零通道:
(chan int)(nil) <- 0
鎖定鎖定的互斥體:
mu := sync.Mutex{} mu.Lock() mu.Lock()
var quit = make(chan struct{}) func main() { // Startup code... // Block until the quit signal arrives: <-quit } // In a separate goroutine, when termination is requested: close(quit)
time.Sleep(time.Duration(1<<63 - 1))
for { time.Sleep(time.Duration(1<<63 - 1)) }
以上是我的 Go Main Goroutine 應該永遠休眠還是優雅退出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!