【发布时间】:2020-09-14 06:50:30
【问题描述】:
我有这个循环,它的作用是尝试反复轮询另一台服务器。我使用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,我错过了什么?
【问题讨论】:
-
您能否就您对该问题投反对票的原因发表评论?这是我在社区提出的第一个问题,最近在学习 Go 并发。在网站上发布我的下一个问题会对我有所帮助。
标签: go cpu cpu-usage goroutine ticker