Выбор ответа Junior Паттерны конкурентности спрашивают часто обновлено

Зачем нужен worker pool

Вопрос

Нужно обработать 1 000 000 URL. Почему не стоит запускать горутину на каждый URL?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сеть, база и лимиты API не выдержат миллиона запросов сразу. Сами горутины дешёвы, и миллион из них рантайм переживёт (несколько гигабайт стеков, но не мгновенный крах).

Варианты ответа

  1. Рантайм Go не позволяет создать больше 10 000 горутин одновременно
  2. Каждая горутина резервирует мегабайт стека, память кончится сразу
  3. Горутины выполняются последовательно на одном потоке, выигрыша не будет
  4. Сеть, база и лимиты API не выдержат миллиона запросов сразуправильный ответ

Разбор

Сами горутины дешёвы, и миллион из них рантайм переживёт (несколько гигабайт стеков, но не мгновенный крах). Проблема в том, что они сделают: миллион соединений упрётся в лимит дескрипторов, rate limit API и память для ответов. Worker pool или семафор держат N одновременных задач. Жёсткого лимита на число горутин нет, стартовый стек около 2 КБ, а выполняются они параллельно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.