Назад к вопросам
МВидео
Middle+
4
Как работают горутины под капотом (модель GMP)?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Go горутины реализованы через модель GMP, где:
- G (goroutine) — это легковесный поток выполнения с собственным стеком и контекстом.
- M (machine) — это системный поток ОС, на котором выполняются горутины.
- P (processor) — логический процессор, который связывает G и M, управляя выполнением.
Работа модели:
- P выделяет M для выполнения горутин.
- M выполняет G, переключаясь между ними по необходимости (например, при блокировках или ожидании).
- Планировщик GMP балансирует нагрузку, распределяя горутины по доступным M и P.
Это позволяет эффективно использовать системные потоки, при этом создавая тысячи горутин с минимальными затратами памяти и переключения контекста, так как переключение между горутинами происходит на уровне пользователя, а не ядра ОС.
Пример:
func main() {
go func() {
fmt.Println("Горутина работает")
}()
time.Sleep(time.Second) // Ждем завершения горутины
}