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