Ответ
В Go нет жесткого ограничения на количество горутин, но есть практические лимиты, связанные с ресурсами системы (память, CPU).
- Теоретически: можно создать миллионы горутин, т.к. они легковесные (начальный стек ~2KB, растет динамически).
- Практически: упирается в доступную память и планировщик.
Пример с созданием 100k горутин:
func main() {
for i := 0; i < 100_000; i++ {
go func(n int) {
fmt.Println(n)
}(i)
}
time.Sleep(time.Second) // даем время на выполнение
}
Проблемы при злоупотреблении:
- Потребление памяти
- Нагрузка на планировщик
- Конкуренция за ресурсы
Рекомендуется использовать worker pools или semaphore pattern для контроля количества.