Что такое горутина? Чем отличается от системного треда? Расскажи про планировщик Go (GMP).
Ответ от нейросети
sobes.tech AI
Горутина — это легковесный поток выполнения в языке Go, управляемый рантаймом Go, а не операционной системой. В отличие от системного треда, горутины имеют гораздо меньший размер стека (начинается с нескольких килобайт и может динамически расти), что позволяет запускать тысячи и даже миллионы горутин одновременно с низкими накладными расходами.
Системные треды создаются и планируются ОС, имеют фиксированный большой стек и более дорогие операции переключения контекста.
Планировщик Go основан на модели GMP:
- G (goroutine) — сама горутина, единица выполнения.
- M (machine) — системный поток (OS thread), на котором выполняются горутины.
- P (processor) — логический процессор, ресурс, необходимый для выполнения горутины на M.
P управляет очередью готовых к выполнению горутин (G). M может выполнять только одну горутину за раз, но благодаря наличию нескольких M и P планировщик эффективно распределяет горутины по системным потокам, обеспечивая конкурентность и параллелизм.
Такой подход позволяет Go эффективно использовать системные ресурсы и масштабироваться на многопроцессорных системах.