Cooperative vs preemptive scheduling в Go?

Middle+
457 просмотров
AFK Offer AI

Go начинал с cooperative scheduling — горутина отдаёт управление только добровольно: при вызове функции (morestack check), при блокировке на канале, при syscall. Проблема: for {} без вызова функций блокирует P навсегда. С Go 1.14 появился preemptive scheduling через сигналы: sysmon шлёт SIGURG горутине, обработчик сигнала сохраняет состояние и переключает на шедулер. Сейчас Go использует гибрид: cooperative points всё ещё работают, но асинхронное вытеснение страхует от зависания.

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

Как общаются микросервисы?