Знаешь ли ты понятие взвешенный семафор? Что это такое?

Взвешенный семафор — это расширение классического семафора, который ограничивает количество одновременно выполняющихся операций.

Короткий ответ

Что ответить на собеседовании

Взвешенный семафор — это расширение классического семафора, который ограничивает количество одновременно выполняющихся операций. В отличие от обычного семафора, где каждый запрос занимает один ресурс (единицу), взвешенный семафор позволяет запросам занимать разное количество ресурсов (вес).

Подробный разбор

Ответ с пояснениями

Взвешенный семафор — это расширение классического семафора, который ограничивает количество одновременно выполняющихся операций. В отличие от обычного семафора, где каждый запрос занимает один ресурс (единицу), взвешенный семафор позволяет запросам занимать разное количество ресурсов (вес).

Например, если у вас есть ограничение на 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)
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее