Ответ
В Go нет жесткого ограничения на количество горутин. Оно ограничено только доступной памятью и ресурсами системы.
Пример создания миллионов горутин:
func main() {
for i := 0; i < 1_000_000; i++ {
go func() {
time.Sleep(time.Second)
}()
}
time.Sleep(2 * time.Second)
}
Нюансы:
- Каждая горутина потребляет ~2-8KB стека (может расти динамически)
- При достижении лимитов памяти программа упадет с OOM
- Практически разумный лимит - десятки/сотни тысяч
- Слишком много горутин может привести к перегрузке планировщика
Для CPU-bound задач лучше ограничивать количество горутин числом ядер (runtime.GOMAXPROCS). Для IO-bound - пулами/семафорами.