Sobes.tech
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 управляет большим числом горутин на меньшем числе системных потоков, обеспечивая высокую конкурентность и низкие накладные расходы.