{
go updateMain()
http.ListenAndServe(":8090", nil)
}
func updateMain() {
ticker := time.NewTicker(time.Second * 5)
for range ticker.C {
update()
}
}
func update() {
//super heavy job with
}
```
получается одна рутина updateMain внутри которой таймер, то что стало выполнятся и таймер снова сработал
что будет происходить с update()
они будут по очереди выполнятся потом, или откидываться или сразу завершаться и запускать новый?
Такую вещь могли бы проверить сами запустив просто)) Если у вас update - это не горутина, то следующая итерация цикла не пойдет, пока update() не завершит работу. Тикер просто в канал попытается засунуть новое значение и уснёт т.к ваш цикл его не прочитает т.к работает апдейт (но надо смотреть внутрь тикера что он там делает, но скорее всего, как я написал) Если вам нужно запускать update и если за 5 сек она не кончилась, убивать её и запускать новую, то используйте contextWithTimeot или что-то подобное Если просто каждые 5 сек запускать джобу и пофиг работают ли другие, то просто в горутине update вызывайте
и перед стартом цикла не забудьте добавить defer ticker.Close
Обсуждают сегодня