У меня есть ресурс, который необходимо загрузить, прежде чем доступ к нему разрешен. Он также должен обновляться каждую минуту.
Каналы имеют длину 1 struct {}, поэтому цикл будет заблокирован, если ресурс не был загружен.
Этот код ниже начал использовать 100% моего процессора, я попытался добавить
time.Sleep(10 * time.Millisecond)
Что привело к снижению потребления процессора приложением до 1%
Я думаю, что тикер был бы лучшим вариантом для временной коллекции.
Есть идеи, почему он потребляет 100% ресурсов процессора, или есть идеи получше?
func (al *AsyncLoop) Run() {
go func() {
for {
select {
case <-al.chanFetchRequest:
if al.fetched == false {
al.fetchData()
} else if al.lastUpdated.Add(1*time.Minute).Unix() < time.Now().Unix() && al.fetching == false {
go al.fetchData()
}
al.chanFetchResponse <- struct{}{}
continue
default:
continue
}
}
}()
}