Skip to content

Latest commit

 

History

History
269 lines (164 loc) · 11.4 KB

File metadata and controls

269 lines (164 loc) · 11.4 KB

СтратегияОграниченияПараллелизма

Английское название: Bulkhead.

Синтаксис:

Новый СтратегияОграниченияПараллелизма(<ЛимитПараллелизма>, <ЛимитОчереди>)

Параметры:

Имя Тип Значение по умолчанию Описание
ЛимитПараллелизма Число Максимально допустимое количество одновременно выполняющихся операций
ЛимитОчереди Число 0 Максимально допустимое количество операций, ожидающих свободный слот

Как работает

Стратегия выполняет операцию, если есть свободный слот параллелизма. Если все слоты заняты, операция может быть поставлена в очередь ожидания в пределах ЛимитОчереди. Ожидающие вызовы обслуживаются в порядке поступления.

Если МаксимальноеОжиданиеСлота больше 0, операция ожидает свободный слот не дольше указанного количества миллисекунд. При превышении этого времени стратегия удаляет вызов из очереди, вызывает обработчик переполнения, если он задан, и выбрасывает исключение. Пользовательская операция в этом случае не запускается.

Если прерывание уже запрошено до вызова стратегии, операция не занимает слот и не попадает в очередь. Если вызов уже находится в очереди ожидания и переданный СигналПрерыванияОперации получает прерывание, стратегия удаляет вызов из очереди и завершает его причиной прерывания. Пользовательская операция в этом случае не запускается.

Диаграмма выполнения:

flowchart TD
    A[Вызов стратегии] --> B{Есть свободный слот?}
    B -- Да --> C[Занять слот]
    B -- Нет --> D{Есть место в очереди?}
    D -- Нет --> E[Вызвать обработчик переполнения<br/>если задан]
    E --> F[Выбросить исключение]
    D -- Да --> G[Ждать освобождения слота]
    G --> H{Прерывание запрошено?}
    H -- Да --> I[Удалить из очереди]
    I --> J[Выбросить исключение]
    H -- Нет --> Q{Превышено максимальное ожидание?}
    Q -- Да --> R[Удалить из очереди]
    R --> E
    Q -- Нет --> K{Слот освобожден?}
    K -- Нет --> G
    K -- Да --> L[Получить слот]
    C --> M[Запустить операцию]
    L --> M[Запустить операцию]
    M --> N[Освободить слот]
    N --> O{Есть ошибка?}
    O -- Да --> J
    O -- Нет --> P[Вернуть результат]
Loading

Методы

Применить
УстановитьЛимитПараллелизма
УстановитьЛимитОчереди
УстановитьМаксимальноеОжиданиеСлота
УстановитьОбработчикПереполнения
ЛимитПараллелизма
ЛимитОчереди
МаксимальноеОжиданиеСлота
КоличествоВыполняющихся
КоличествоОжидающих

Применить

Синтаксис:

Применить(<Операция>, <Параметры>, <СигналПрерыванияОперации>)

Параметры:

Имя Тип Значение по умолчанию Описание
Операция Действие, ШагПайплайнаОтказоустойчивости, Строка Выполняемая операция, вложенный шаг пайплайна или лямбда-выражение операции
Параметры Массив, ФиксированныйМассив, Произвольный, Неопределено Неопределено Параметры операции
СигналПрерыванияОперации СигналПрерыванияОперации, Неопределено Неопределено Сигнал кооперативного прерывания операции

Возвращаемое значение:

Тип: Произвольный.

Описание:

Выполняет операцию с учетом лимита параллелизма и очереди ожидания.

УстановитьЛимитПараллелизма

Синтаксис:

УстановитьЛимитПараллелизма(<ЛимитПараллелизма>)

Параметры:

Имя Тип Описание
ЛимитПараллелизма Число Максимально допустимое количество одновременно выполняющихся операций

Возвращаемое значение:

Тип: СтратегияОграниченияПараллелизма.

Описание:

Устанавливает лимит параллелизма. Метод предназначен для настройки стратегии до начала выполнения операций.

УстановитьЛимитОчереди

Синтаксис:

УстановитьЛимитОчереди(<ЛимитОчереди>)

Параметры:

Имя Тип Описание
ЛимитОчереди Число Максимально допустимое количество ожидающих операций

Возвращаемое значение:

Тип: СтратегияОграниченияПараллелизма.

Описание:

Устанавливает лимит очереди ожидания. Значение 0 означает немедленное отклонение операции при отсутствии свободного слота.

УстановитьМаксимальноеОжиданиеСлота

Синтаксис:

УстановитьМаксимальноеОжиданиеСлота(<МаксимальноеОжиданиеСлота>)

Параметры:

Имя Тип Описание
МаксимальноеОжиданиеСлота Число Максимальное время ожидания свободного слота в миллисекундах

Возвращаемое значение:

Тип: СтратегияОграниченияПараллелизма.

Описание:

Устанавливает максимальное время ожидания операции в очереди. Значение 0 означает ожидание без ограничения.

УстановитьОбработчикПереполнения

Синтаксис:

УстановитьОбработчикПереполнения(<Обработчик>, <ДополнительныеПараметры>)

Параметры:

Имя Тип Описание
Обработчик Действие, Строка Обработчик, вызываемый при переполнении лимита параллелизма. Строка трактуется как лямбда-выражение. Получает КонтекстПереполненияПараллелизма. Возвращаемое значение не используется
ДополнительныеПараметры Массив, ФиксированныйМассив, Произвольный, Неопределено Дополнительные параметры, которые будут переданы обработчику после контекста переполнения

Возвращаемое значение:

Тип: СтратегияОграниченияПараллелизма.

Описание:

Устанавливает обработчик переполнения лимита параллелизма. Если заданы дополнительные параметры, они передаются после контекста переполнения. Подробности о лямбда-выражениях см. в руководстве.

ЛимитПараллелизма

Синтаксис:

ЛимитПараллелизма()

Возвращаемое значение:

Тип: Число.

Описание:

Возвращает текущий лимит параллелизма.

ЛимитОчереди

Синтаксис:

ЛимитОчереди()

Возвращаемое значение:

Тип: Число.

Описание:

Возвращает текущий лимит очереди ожидания.

МаксимальноеОжиданиеСлота

Синтаксис:

МаксимальноеОжиданиеСлота()

Возвращаемое значение:

Тип: Число.

Описание:

Возвращает максимальное время ожидания свободного слота в миллисекундах. Значение 0 означает ожидание без ограничения.

КоличествоВыполняющихся

Синтаксис:

КоличествоВыполняющихся()

Возвращаемое значение:

Тип: Число.

Описание:

Возвращает текущее количество выполняющихся операций.

КоличествоОжидающих

Синтаксис:

КоличествоОжидающих()

Возвращаемое значение:

Тип: Число.

Описание:

Возвращает текущее количество операций, ожидающих свободный слот.