Как работает timer в Go runtime?

Senior
347 просмотров
AFK Offer AI

Таймеры в Go (time.After, time.Timer, time.Ticker) реализованы как runtime timers. С Go 1.14 каждый P имеет свой timer heap (min-heap), до этого был один глобальный heap с мьютексом — bottleneck. Когда таймер срабатывает, рантайм вызывает callback (обычно отправку в канал). Шедулер проверяет таймеры при каждом проходе scheduling loop и при возврате из netpoller. Это означает, что таймеры не гарантируют точность до наносекунды — они срабатывают при первой возможности после дедлайна.

Следующий вопрос

Как генерировать Go код из proto?