Планировщик 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?
Middle+
988 просмотровAFK Offer AI
Что такое чистая архитектура в Go?