Выбор ответа Junior Паттерны конкурентности спрашивают часто обновлено
Зачем нужен worker pool
Вопрос
Нужно обработать 1 000 000 URL. Почему не стоит запускать горутину на каждый URL?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сеть, база и лимиты API не выдержат миллиона запросов сразу. Сами горутины дешёвы, и миллион из них рантайм переживёт (несколько гигабайт стеков, но не мгновенный крах).
Варианты ответа
- Рантайм Go не позволяет создать больше 10 000 горутин одновременно
- Каждая горутина резервирует мегабайт стека, память кончится сразу
- Горутины выполняются последовательно на одном потоке, выигрыша не будет
- Сеть, база и лимиты API не выдержат миллиона запросов сразуправильный ответ
Разбор
Сами горутины дешёвы, и миллион из них рантайм переживёт (несколько гигабайт стеков, но не мгновенный крах). Проблема в том, что они сделают: миллион соединений упрётся в лимит дескрипторов, rate limit API и память для ответов. Worker pool или семафор держат N одновременных задач. Жёсткого лимита на число горутин нет, стартовый стек около 2 КБ, а выполняются они параллельно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.