Как работает планировщик Go?

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

Планировщик Go реализует M:N модель — M горутин на N OS-тредов. Работает на трёх сущностях: G (горутина), M (машинный тред), P (логический процессор). Количество P задаётся через GOMAXPROCS. Каждый P имеет локальную очередь горутин, плюс есть глобальная очередь. Когда горутина блокируется на syscall, M отсоединяется от P, и P берёт другой свободный M. Есть work stealing — если у P закончились горутины, он ворует из очереди другого P. Preemption тоже есть: с Go 1.14 горутину можно вытеснить даже в tight loop через асинхронные сигналы.

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

Что такое чистая архитектура в Go?