Ответ
Горутины — это легковесные потоки, управляемые рантаймом Go, а не ОС. Они потребляют меньше памяти (стек ~2 КБ, динамически растёт) и быстро переключаются. В отличие от системных потоков (1 МБ стек, дорогое переключение), Go-рантайм эффективно планирует горутины на небольшом числе системных потоков (GOMAXPROCS).
Пример:
for i := 0; i < 100_000; i++ {
go func(id int) {
fmt.Println(id)
}(i)
}
Работает, потому что:
- Нет накладных расходов на создание потока ОС.
- Планировщик Go кооперативный (не вытесняющий), минимизирует contention.
- Сборщик мусора оптимизирован под высокую concurrenсy.
В других языках аналоги (корутины) требуют ручного управления или имеют ограничения рантайма.