Про передачу сигнала на процесс

Редактировал(а) Alexandr Fokin 2026/06/18 22:07

  
Описание колонок
  
ТриггерИспользуется ли триггер
Избыточная задержка сигналаСвойство обозначающее, что процесс может получить сигнал (и продолжить обработку) позже чем мог бы (при использовании других подходов).
Stream триггерТриггер, отслеживающий состояние процесса (выполняется он или нет).
Реализуется через отправку TriggerEvent в момент остановки выполнения процесса (делается автоматически если зарегистрирован).
Пробуждает процесс (передает новый сигнал), только после того как процесс перешел в состояние ожидания.
Wakeup condition

Модуль wakeup condition проверяет условие наличия новых сигналов перед остановкой процесса.
От разработчика требуется реализация хендлера проверки условия.

Wakeup lock (Wakeup state)

Модуль wakeup lock добавляет отдельную таблицу для синхронизации.
Используется только в сочетании с Wakeup condition.

Гарантированная конкурентная доставка сигнала

Типы передачи сигналов
 ТипПримерТриггерИзбыточная задержка сигналаStream триггерWakeup conditionWakeup lock
1Низкая интенсивность сигналов, низкая конкуренция за процесс.

Линейный процесс отправил запрос и ждет 1 событие ответ.
Хендлер события пробуждает процесс напрямую.

-----
2Высокая интенсивность сигналов, высокая конкуренция за процесс.
Сигнал нужно подавать через триггер.
      
2.1Несколько конкурирующих триггеров с cannot hold lock timeout.
Если не удалось получить блокировку процесса, то выполнение триггера откладывается на некоторый timeout.
Триггеры <-> Процесс.++---
2.2Один stream триггер.
Высокая частота сигналов, но низкая конкуренция (условие активации триггера наличие необработанного сигнала и остановка процесса).
Можно использовать без таблицы Wakeup lock.
Simple stream trigger <-> Процесс.

Transactional outbox. См Примеры 3.
+-++--
2.2.1Каскад триггеров.
Подход, когда 1 корневой simple stream trigger передает сигнал на процесс.
А другие триггеры процесса передают сигнал не на процесс напрямую, а на корневой триггер.
Данный подход позволяет использовать несколько триггеров (как в варианте 2.3), но при этом полностью убирает конкуренцию (не требует wakeup lock (и может работать без wakeup condition)).
Дочерние триггеры
<-> Корневой триггер (Simple stream trigger)
<-> Процесс
+-++--
2.3Несколько конкурирующих триггеров.
Высокая интенсивность сигналов, высокая конкуренция за процесс.
Для сглаживания конкуренции используется Wakeup lock (share блокировка минимизирует блокировку и сглаживает конкуренцию).
+--++
3Периодическая проверкаПроцесс пробуждается каждые N timeout, используется только 1 timer trigger. См. Примеры 1 (блок 2).++---