Back to questions
Senior
6
Кто и как переключает горутины между собой? Расскажите про планировщик (M:G:P).
Companies where asked
техвил
Answer from AI
sobes.tech AI
В Go планировщик горутин реализован по модели M:N (M:G:P), где:
- G (goroutine) — легковесная нить исполнения.
- M (machine) — системный поток ОС, на котором выполняются горутины.
- P (processor) — логический процессор, который связывает M и G, управляет выполнением.
Планировщик отвечает за переключение между горутинами, распределяя их выполнение по доступным M через P.
Как происходит переключение:
- Каждому M назначается P, и M выполняет горутины из очереди P.
- Когда горутина блокируется (например, на ввод/вывод), планировщик может переключить M на другую горутину, чтобы не простаивать.
- Планировщик использует кооперативное и вытесняющее переключение, чтобы эффективно использовать системные потоки.
Таким образом, планировщик Go управляет большим числом горутин на меньшем числе системных потоков, обеспечивая высокую конкурентность и низкие накладные расходы.