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)
不阻塞睡眠
保持程序运行而不阻塞主 goroutine 的另一种方法是使用较长的睡眠持续时间:
time.Sleep(time.Duration(1<<63 - 1))
对于运行时间极长的程序,此类休眠语句的循环可以是已就业:
for { time.Sleep(time.Duration(1<<63 - 1)) }
以上是如何防止Go程序中的主goroutine过早终止?的详细内容。更多信息请关注PHP中文网其他相关文章!