Senior
¿Qué son las goroutines en Go? ¿En qué se diferencian de los hilos del sistema operativo? ¿Cómo funciona el planificador de Go (modelo GMP)?
sobes.tech AI
Respuesta de la IA
Горутины — это легковесные потоки исполнения в языке 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")
}()
Таким образом, горутины обеспечивают эффективную конкурентность с низкими накладными расходами по сравнению с потоками ОС.