❓ Что такое M:N schedulingM:N scheduling в Go — это
модель планирования, при которой множество горутин (M) выполняется поверх ограниченного
количества потоков операционной системы (N). Это отличается от моделей 1:1 (каждая горутина — отдельный системный
поток) и N:1 (все горутины на одном системном
потоке).
В Go реализована модель M:N с использованием трех основных сущностей:
• G (Goroutine) — легковесная пользовательская горутина с собственным стеком и контекстом исполнения.
• M (Machine) — системный
поток, управляемый ОС, на котором реально выполняется код.
• P (Processor) — логический
процессор, который связывает горутины с
потоками, предоставляя им контекст и ресурсы для выполнения.
Количество P по умолчанию равно числу логических
CPU или задается через
runtime.GOMAXPROCS. Для выполнения горутин P должен быть привязан к M. Планировщик Go распределяет горутины между доступными P и M.
🐸 Библиотека Go для собеса