У меня есть эта петля, которая пытается повторно опросить другой сервер. Для этого я использовал тикер, однако программа постоянно показывает 100% загрузку ЦП.
Этот тикер работает внутри горутины. и HTTP-сервер работает внутри другой горутины.
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
}()
}
Однако, когда запускаются циклы мониторинга и каждый раз, когда отправляется сигнал на канал тикера, ЦП постоянно показывает 100%.
Что я упустил при использовании тикера в горутине, чтобы он не потреблял 100% ресурсов ЦП?