Sobes.tech
Назад к вопросам
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)
}