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

Семафор на буферизованном канале

Вопрос

Как ограничить число одновременных горутин пятью без пула воркеров?

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

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

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

Коротко

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

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

  1. runtime.GOMAXPROCS(5): больше пяти горутин не запустится
  2. sync.WaitGroup с Add(5): шестая горутина будет ждать
  3. Буферизованный канал на 5: занять слот до запуска, освободить послеправильный ответ
  4. time.Sleep между запусками, чтобы горутины не накладывались

Разбор

Канал ёмкостью 5 работает как счётчик слотов: шестая отправка заблокируется, пока одна из горутин не освободит слот. GOMAXPROCS ограничивает параллельное выполнение Go-кода, но не число горутин, ждущих на сети. WaitGroup только ждёт. Sleep ничего не гарантирует.

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

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