Что такое semaphore через buffered channel?

Middle
257 просмотров
AFK Offer AI

Buffered channel размером N работает как семафор: можно записать N значений без блокировки, N+1 заблокируется. Захват: ch <- struct{}{}, освобождение: <-ch. Это самый простой и идиоматичный способ ограничить параллелизм в Go. Нет внешних зависимостей, понятно каждому гоферу. Для weighted semaphore (разные операции стоят по-разному) — golang.org/x/sync/semaphore с Acquire(ctx, weight). Но для большинства задач buffered channel — то что нужно.

Следующий вопрос

Как ограничить concurrent requests?