Какое максимальное количество горутин можно создать в Go

«Какое максимальное количество горутин можно создать в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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 - пулами/семафорами.