Назад к вопросам
Middle
3
Знаешь ли ты понятие взвешенный семафор? Что это такое?
Компании, где спрашивали
FinFrame
Ответ от нейросети
sobes.tech AI
Взвешенный семафор — это расширение классического семафора, который ограничивает количество одновременно выполняющихся операций. В отличие от обычного семафора, где каждый запрос занимает один ресурс (единицу), взвешенный семафор позволяет запросам занимать разное количество ресурсов (вес).
Например, если у вас есть ограничение на 10 единиц ресурсов, один запрос может занимать 3 единицы, другой — 5, и так далее. Семафор блокирует новые запросы, если суммарный вес занятых ресурсов достигает лимита.
В Go это удобно для контроля параллелизма с разной «стоимостью» задач. В стандартной библиотеке есть golang.org/x/sync/semaphore, который реализует взвешенный семафор.
Пример использования:
import (
"context"
"golang.org/x/sync/semaphore"
)
func main() {
sem := semaphore.NewWeighted(10) // лимит 10 единиц
ctx := context.Background()
// Запрос занимает 3 единицы
if err := sem.Acquire(ctx, 3); err != nil {
// обработка ошибки
}
// ... работа
sem.Release(3)
}