Sobes.tech
Назад к вопросам
Senior
5

Что произойдёт, если запустить 5 триллионов горутин? Как оптимизировать?

Компании, где спрашивали
РамблерРамблер

Ответ от нейросети

sobes.tech AI

Запуск 5 триллионов горутин невозможен на практике из-за ограничений памяти и ресурсов ОС. Горутины легковесны, но каждая требует стек (по умолчанию ~2KB), что приведёт к исчерпанию памяти.

Что произойдёт:

  • Память быстро закончится, программа упадёт с ошибкой.
  • Производительность сильно упадёт из-за переключения контекста.

Как оптимизировать:

  • Использовать пул горутин (worker pool), ограничивая количество одновременно работающих горутин.
  • Разбивать задачи на меньшие партии и обрабатывать их последовательно или параллельно с контролем числа горутин.
  • Использовать каналы для управления нагрузкой и синхронизации.
  • Пересмотреть логику: возможно, не нужно столько параллелизма.

Пример пула горутин:

const workerCount = 100
jobs := make(chan Job)

for i := 0; i < workerCount; i++ {
    go func() {
        for job := range jobs {
            process(job)
        }
    }()
}

for _, job := range allJobs {
    jobs <- job
}
close(jobs)

Таким образом, контролируем количество горутин и избегаем исчерпания ресурсов.