Senior
24
Расскажи, как устроена работа планировщика горутин в Go (GMP)?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Планировщик горутин в Go основан на модели GMP (Goroutine, Machine, Processor).
- G (Goroutine) — легковесный поток выполнения, который запускает пользовательский код.
- M (Machine) — системный поток ОС, который выполняет горутины.
- P (Processor) — логический процессор, который связывает M и G, управляет выполнением.
Работа планировщика:
- У каждого P есть очередь готовых к выполнению горутин (G).
- M привязывается к P, берет из его очереди G и выполняет их.
- Если горутина блокируется (например, на ввод/вывод), M освобождается и может взять другую P с готовыми горутинами.
- Планировщик балансирует нагрузку между P, чтобы максимально эффективно использовать системные потоки.
Это позволяет Go эффективно масштабировать большое количество горутин на ограниченное число системных потоков, обеспечивая высокую конкурентность с минимальными накладными расходами.
Пример создания горутины:
func main() {
go func() {
fmt.Println("Hello from goroutine")
}()
time.Sleep(time.Second) // Ждем, чтобы горутина успела выполниться
}