Назад к вопросам
Selectel
Senior
3
Что такое горутины в Go? Чем они отличаются от потоков ОС? Как работает планировщик Go (GMP модель)?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Горутины — это легковесные потоки исполнения в языке Go, которые управляются планировщиком внутри рантайма Go, а не операционной системой. Они позволяют запускать функции параллельно с минимальными затратами по памяти и времени на переключение контекста.
Отличия от потоков ОС:
- Горутины гораздо легче по ресурсам (обычно стартуют с 2 КБ стека, который динамически растёт).
- Планирование горутин происходит в пользовательском пространстве, а не ядром ОС.
- Переключение между горутинами быстрее, чем между потоками ОС.
Планировщик Go основан на модели GMP:
- G (goroutine) — сама горутина, единица работы.
- M (machine) — системный поток ОС, на котором выполняются горутины.
- P (processor) — логический процессор, который связывает G и M, управляет выполнением.
Работа планировщика:
- Количество P ограничено GOMAXPROCS (по умолчанию равно числу CPU).
- Каждый P может выполнять одну горутину G на одном потоке M.
- Планировщик распределяет горутины по доступным P и M, переключая их при блокировках или по таймауту.
Пример создания горутины:
go func() {
fmt.Println("Hello from goroutine")
}()
Таким образом, горутины обеспечивают эффективную конкурентность с низкими накладными расходами по сравнению с потоками ОС.