我有这个循环,它的作用是尝试反复轮询另一台服务器。我使用ticker来实现这一点,但是程序反复显示100%的CPU使用率。
这个代码在一个 goroutine 中运行。HTTP 服务器在另一个 goroutine 中运行。
func() Monitor() {
abort := make(chan bool)
log.Info("Monitor started.")
// start the monitor goroutine
go func() {
defer log.Info("Stopped monitor")
ticker := time.NewTicker(time.Duration(35.0) * time.Second)
defer ticker.Stop()
log.Info("Monitor started! \n")
for {
select {
case t := <-ticker.C:
log.Infof("Subscribe to service at time %v\n", t)
if err := selfConn.SubscribeToService(); err != nil {
log.Errorf("Failed to subscribe to primary connector: %v", err)
}
case <-abort:
log.Info("Finished routine!")
return
default:
continue
}
}
}()
go func() {
time.Sleep(10 * time.Minute)
abort <- true
}()
}
但是,当监视器循环开始时,每次发送到股票通道的信号时,CPU 都会持续显示 100%。
在 goroutine 中使用 ticker 以使其不会消耗 100% CPU,我错过了什么?
子衿沉夜
相关分类