Английское название: 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[Вернуть результат]
Применить
УстановитьЛимитПараллелизма
УстановитьЛимитОчереди
УстановитьМаксимальноеОжиданиеСлота
УстановитьОбработчикПереполнения
ЛимитПараллелизма
ЛимитОчереди
МаксимальноеОжиданиеСлота
КоличествоВыполняющихся
КоличествоОжидающих
Синтаксис:
Применить(<Операция>, <Параметры>, <СигналПрерыванияОперации>)Параметры:
| Имя | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
| Операция | Действие, ШагПайплайнаОтказоустойчивости, Строка | Выполняемая операция, вложенный шаг пайплайна или лямбда-выражение операции | |
| Параметры | Массив, ФиксированныйМассив, Произвольный, Неопределено | Неопределено |
Параметры операции |
| СигналПрерыванияОперации | СигналПрерыванияОперации, Неопределено | Неопределено |
Сигнал кооперативного прерывания операции |
Возвращаемое значение:
Тип: Произвольный.
Описание:
Выполняет операцию с учетом лимита параллелизма и очереди ожидания.
Синтаксис:
УстановитьЛимитПараллелизма(<ЛимитПараллелизма>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| ЛимитПараллелизма | Число | Максимально допустимое количество одновременно выполняющихся операций |
Возвращаемое значение:
Тип: СтратегияОграниченияПараллелизма.
Описание:
Устанавливает лимит параллелизма. Метод предназначен для настройки стратегии до начала выполнения операций.
Синтаксис:
УстановитьЛимитОчереди(<ЛимитОчереди>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| ЛимитОчереди | Число | Максимально допустимое количество ожидающих операций |
Возвращаемое значение:
Тип: СтратегияОграниченияПараллелизма.
Описание:
Устанавливает лимит очереди ожидания. Значение 0 означает немедленное отклонение операции при отсутствии свободного слота.
Синтаксис:
УстановитьМаксимальноеОжиданиеСлота(<МаксимальноеОжиданиеСлота>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| МаксимальноеОжиданиеСлота | Число | Максимальное время ожидания свободного слота в миллисекундах |
Возвращаемое значение:
Тип: СтратегияОграниченияПараллелизма.
Описание:
Устанавливает максимальное время ожидания операции в очереди. Значение 0 означает ожидание без ограничения.
Синтаксис:
УстановитьОбработчикПереполнения(<Обработчик>, <ДополнительныеПараметры>)Параметры:
| Имя | Тип | Описание |
|---|---|---|
| Обработчик | Действие, Строка | Обработчик, вызываемый при переполнении лимита параллелизма. Строка трактуется как лямбда-выражение. Получает КонтекстПереполненияПараллелизма. Возвращаемое значение не используется |
| ДополнительныеПараметры | Массив, ФиксированныйМассив, Произвольный, Неопределено | Дополнительные параметры, которые будут переданы обработчику после контекста переполнения |
Возвращаемое значение:
Тип: СтратегияОграниченияПараллелизма.
Описание:
Устанавливает обработчик переполнения лимита параллелизма. Если заданы дополнительные параметры, они передаются после контекста переполнения. Подробности о лямбда-выражениях см. в руководстве.
Синтаксис:
ЛимитПараллелизма()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает текущий лимит параллелизма.
Синтаксис:
ЛимитОчереди()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает текущий лимит очереди ожидания.
Синтаксис:
МаксимальноеОжиданиеСлота()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает максимальное время ожидания свободного слота в миллисекундах. Значение 0 означает ожидание без ограничения.
Синтаксис:
КоличествоВыполняющихся()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает текущее количество выполняющихся операций.
Синтаксис:
КоличествоОжидающих()Возвращаемое значение:
Тип: Число.
Описание:
Возвращает текущее количество операций, ожидающих свободный слот.