Go 程式中Main Goroutine 的持久化
人們可能會遇到這樣的問題:如何防止Go 程式的Main Goroutine 過早終止。換句話說,目標是讓程式無限期地運行,除非透過明確的使用者介入。
「休眠」主Goroutine
有幾種方法可以讓主協程永遠等待而不消耗CPU 資源:
空select宣告:
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... // Blocking (waiting for quit signal): <-quit } // Quitting in another goroutine: close(quit)
如果需要一種終止程序的機制,一個簡單的通道可以服務目的:
不阻塞睡眠
time.Sleep(time.Duration(1<<63 - 1))
保持程序運作而不阻塞主goroutine 的另一種方法是使用較長的睡眠時間:
for { time.Sleep(time.Duration(1<<63 - 1)) }對於運行時間極長的程序,此類休眠語句的循環可以是已就業:
以上是如何防止Go程式中的主goroutine過早終止?的詳細內容。更多資訊請關注PHP中文網其他相關文章!