Sobes.tech
Назад к вопросам
Senior
2

Что такое горутина? Чем отличается от системного треда? Расскажи про планировщик Go (GMP).

Компании, где спрашивали
Lenta Tech

Ответ от нейросети

sobes.tech AI

Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой. В отличие от системного треда, горутины имеют гораздо меньший размер стека (начинается с нескольких килобайт и может динамически расти), что позволяет запускать тысячи и даже миллионы горутин одновременно с низкими накладными расходами.

Системные треды создаются и планируются ОС, имеют фиксированный большой стек и более дорогие операции переключения контекста.

Планировщик Go основан на модели GMP:

  • G (goroutine) — сама горутина, единица выполнения.
  • M (machine) — системный поток (OS thread), на котором выполняются горутины.
  • P (processor) — логический процессор, ресурс, необходимый для выполнения горутины на M.

P управляет очередью готовых к выполнению горутин (G). M может выполнять только одну горутину за раз, но благодаря наличию нескольких M и P планировщик эффективно распределяет горутины по системным потокам, обеспечивая конкурентность и параллелизм.

Такой подход позволяет Go эффективно использовать системные ресурсы и масштабироваться на многопроцессорных системах.