Исходный код вики Про передачу сигнала на процесс
Версия 1.4 от Alexandr Fokin на 2026/05/05 15:57
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | | | | ||
| 2 | |Описание колонок|((( | ||
| 3 | |(% style="width:232px" %) |(% style="width:1151px" %) | ||
| 4 | |(% style="width:232px" %)Триггер|(% style="width:1151px" %)Используется ли триггер | ||
| 5 | |(% style="width:232px" %)Избыточная задержка сигнала|(% style="width:1151px" %)Свойство обозначающее, что процесс может получить сигнал (и продолжить обработку) позже чем мог бы (при использовании других подходов). | ||
| 6 | |(% style="width:232px" %)Stream триггер|(% style="width:1151px" %)Триггер, отслеживающий состояние процесса (выполняется он или нет). | ||
| 7 | Реализуется через отправку TriggerEvent в момент остановки выполнения процесса (делается автоматически если зарегистрирован). | ||
| 8 | Пробуждает процесс (передает сигнал), только после того как процесс остановил выполнение. | ||
| 9 | |(% style="width:232px" %)Wakeup condition|(% style="width:1151px" %)Модуль wakeup condition проверяет условие наличия новых сигналов перед остановкой процесса. | ||
| 10 | От разработчика требуется реализация хендлера проверки условия. | ||
| 11 | |(% style="width:232px" %)Wakeup state|(% style="width:1151px" %)((( | ||
| 12 | Модуль wakeup state добавляет отдельную таблицу для синхронизации. | ||
| 13 | Используется только в сочетании с Wakeup condition. | ||
| 14 | Решает 2 задачи: | ||
| 15 | 1) Информация о выполнении процесса считывается из Wakeup state (без взятия блокировки процесса). Если процесс выполняется, то сигнал считается доставленным и никаких обновлений не требуется. | ||
| 16 | 2) Синхронизация проверки условия Wakeup condition, гарантия что сигнал не будет утерян. | ||
| 17 | В конце сессии обработки процесса Wakeup state блокируется и только после этого проверяется условие наличие новых сигналов Wakeup condition, это гарантирует что ни один поступивший сигнал не будет утерян. | ||
| 18 | |||
| 19 | Такой подход позволяет минимизировать ожидание на блокировках. | ||
| 20 | ))) | ||
| 21 | ))) | ||
| 22 | |Типы передачи сигналов|((( | ||
| 23 | | |(% style="width:662px" %)Тип|(% style="width:513px" %)Пример|Триггер|Избыточная задержка сигнала|Stream триггер|Wakeup condition|Wakeup state | ||
| 24 | |1|(% style="width:662px" %)Если внешний сигнал единичный и процесс гарантировано остановлен, то его можно подать сразу на процесс (без триггера).|(% style="width:513px" %)((( | ||
| 25 | Линейный процесс отправил запрос и ждет 1 событие ответ. | ||
| 26 | Хендлер события пробуждает процесс напрямую. | ||
| 27 | )))|-|-|-|-|- | ||
| 28 | |2|(% style="width:662px" %)Если внешний сигнал множественный или процесс может периодически запускаться, то сигнал нужно подавать через триггер.|(% style="width:513px" %) | | | | | | ||
| 29 | |2.1|(% style="width:662px" %)Несколько конкурирующих триггеров с cannot hold lock timeout. | ||
| 30 | Если не удалось получить блокировку процесса, то выполнение триггера откладывается на некоторый timeout.|(% style="width:513px" %) |+|+|-|-|- | ||
| 31 | |2.2|(% style="width:662px" %)Если используется один stream триггер, то можно обойтись без таблицы wakeup state entity.|(% style="width:513px" %)Transactional outbox.|+|-|+|+-|- | ||
| 32 | |2.3|(% style="width:662px" %)Несколько конкурирующих триггеров.|(% style="width:513px" %) |+|-|-|+|+ | ||
| 33 | |||
| 34 | |||
| 35 | ))) | ||
| 36 | | | | ||
| 37 | |||
| 38 |