Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: leak, memory, concurrency, workerpool

Чем опасно безлимитное создание горутин, и как ограничивать параллелизм?

Проверяет понимание управления жизненным циклом горутин и лимитов пула.

Короткий ответ

Безлимитное создание горутин приводит к утечкам памяти, росту нагрузки на планировщик и крашу по OOM. Ограничивать параллелизм нужно через worker pool, семафоры или буферизированные каналы.

Длинный ответ

Горутины лёгкие, но они НЕ бесплатные. Каждая начинается с ~2 KB стека и растёт по мере работы. Если создать тысячи горутин “без лимита”, возникают:

  1. Утечки (goroutine leaks) — когда горутина блокируется на канале/IO навсегда.

  2. Рост использования памяти — десятки тысяч горутин → сотни MB.

  3. Перегрузка планировщика Go — runtime тратит много времени на управление M:N.

  4. Out Of Memory — OS убивает процесс.

Ограничивать параллелизм можно:

  • worker pool (pool из фиксированного числа горутин):

pool := make(chan struct{}, 20)
for _, task := range tasks {
    pool <- struct{}{}
    go func(task ...) {
        defer func(){ <-pool }()
        work(task)
    }()
}
  • семафором

  • каналами фиксированной ёмкости

  • sizedwaitgroup

Пул горутин — единственно корректный способ обработки большого числа задач.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • Golang

    Golang

Ключевые слова

#leak

#memory

#concurrency

#workerpool

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.