Как реализовать semaphore?

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

Semaphore ограничивает число одновременных операций. В Go — буферизованный канал: sem := make(chan struct{}, maxConcurrent). Перед операцией: sem <- struct{}{} (блокируется если полон). После: <-sem. Всё. Или через golang.org/x/sync/semaphore — Weighted semaphore с context support. Пример: ограничить параллельные HTTP запросы до 10. Без semaphore 1000 горутин ударят в API одновременно и получат 429. С semaphore — максимум 10 в любой момент.

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

Как работает sync.Map внутри?