Изменения документа Про передачу сигнала на процесс
Редактировал(а) Alexandr Fokin 2026/06/18 22:07
От версии 1.17
отредактировано Alexandr Fokin
на 2026/05/29 18:59
на 2026/05/29 18:59
Изменить комментарий:
К данной версии нет комментариев
К версии 1.6
отредактировано Alexandr Fokin
на 2026/05/05 16:10
на 2026/05/05 16:10
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -5,41 +5,31 @@ 5 5 |(% style="width:232px" %)Избыточная задержка сигнала|(% style="width:1151px" %)Свойство обозначающее, что процесс может получить сигнал (и продолжить обработку) позже чем мог бы (при использовании других подходов). 6 6 |(% style="width:232px" %)Stream триггер|(% style="width:1151px" %)Триггер, отслеживающий состояние процесса (выполняется он или нет). 7 7 Реализуется через отправку TriggerEvent в момент остановки выполнения процесса (делается автоматически если зарегистрирован). 8 -Пробуждает процесс (передает новый сигнал), только после того как процесс перешел в состояние ожидания. 9 -|(% style="width:232px" %)Wakeup condition|(% style="width:1151px" %)((( 10 -Модуль wakeup condition проверяет условие наличия новых сигналов перед остановкой процесса. 8 +Пробуждает процесс (передает сигнал), только после того как процесс остановил выполнение. 9 +|(% style="width:232px" %)Wakeup condition|(% style="width:1151px" %)Модуль wakeup condition проверяет условие наличия новых сигналов перед остановкой процесса. 11 11 От разработчика требуется реализация хендлера проверки условия. 12 -))) 13 -|(% style="width:232px" %)Wakeup lock (Wakeup state)|(% style="width:1151px" %)((( 14 -Модуль wakeup lock добавляет отдельную таблицу для синхронизации. 11 +|(% style="width:232px" %)Wakeup state|(% style="width:1151px" %)((( 12 +Модуль wakeup state добавляет отдельную таблицу для синхронизации. 15 15 Используется только в сочетании с Wakeup condition. 14 +Решает 2 задачи: 15 +1) Информация о выполнении процесса считывается из Wakeup state (без взятия блокировки процесса). Если процесс выполняется, то сигнал считается доставленным и никаких обновлений не требуется. 16 +2) Синхронизация проверки условия Wakeup condition, гарантия что сигнал не будет утерян. 17 +В конце сессии обработки процесса Wakeup state блокируется и только после этого проверяется условие наличие новых сигналов Wakeup condition, это гарантирует что ни один поступивший сигнал не будет утерян. 16 16 17 - [[Гарантированнаяконкурентнаядоставкасигнала>>doc:Проектыирепозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Гарантированнаяконкурентная доставкасигнала.WebHome]]19 +Такой подход позволяет минимизировать ожидание на блокировках. 18 18 ))) 19 19 ))) 20 20 |Типы передачи сигналов|((( 21 -| |(% style="width:662px" %)Тип|(% style="width:513px" %)Пример|Триггер|Избыточная задержка сигнала|Stream триггер|Wakeup condition|Wakeup lock22 -|1|(% style="width:662px" %) Низкаяинтенсивностьсигналов,низкаяконкуренцияза процесс.|(% style="width:513px" %)(((23 +| |(% style="width:662px" %)Тип|(% style="width:513px" %)Пример|Триггер|Избыточная задержка сигнала|Stream триггер|Wakeup condition|Wakeup state 24 +|1|(% style="width:662px" %)Если внешний сигнал единичный и процесс гарантировано остановлен, то его можно подать сразу на процесс (без триггера).|(% style="width:513px" %)((( 23 23 Линейный процесс отправил запрос и ждет 1 событие ответ. 24 24 Хендлер события пробуждает процесс напрямую. 25 25 )))|-|-|-|-|- 26 -|2|(% style="width:662px" %)Высокая интенсивность сигналов, высокая конкуренция за процесс. 27 -Сигнал нужно подавать через триггер.|(% style="width:513px" %) | | | | | 28 +|2|(% style="width:662px" %)Если внешний сигнал множественный или процесс может периодически запускаться, то сигнал нужно подавать через триггер.|(% style="width:513px" %) | | | | | 28 28 |2.1|(% style="width:662px" %)Несколько конкурирующих триггеров с cannot hold lock timeout. 29 -Если не удалось получить блокировку процесса, то выполнение триггера откладывается на некоторый timeout.|(% style="width:513px" %)__Триггеры <-> Процесс.__|+|+|-|-|- 30 -|2.2|(% style="width:662px" %)Один stream триггер. 31 -Высокая частота сигналов, но низкая конкуренция (условие активации триггера наличие необработанного сигнала и остановка процесса). 32 -Можно использовать без таблицы Wakeup lock.|(% style="width:513px" %)__Simple stream trigger <-> Процесс.__ 33 -\\Transactional outbox. См [[Примеры>>doc:Проекты и репозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Примеры.WebHome]] 3.|+|-|+|+-|- 34 -|2.2.1|(% style="width:662px" %)Каскад триггеров. 35 -Подход, когда 1 корневой simple stream trigger передает сигнал на процесс. 36 -А другие триггеры процесса передают сигнал не на процесс напрямую, а на корневой триггер. 37 -Данный подход позволяет использовать несколько триггеров (как в варианте 2.3), но при этом полностью убирает конкуренцию (не требует wakeup lock (и может работать без wakeup condition)).|(% style="width:513px" %)__Дочерние триггеры 38 -<-> Корневой триггер (Simple stream trigger) 39 -<-> Процесс__|+|-|+|+-|- 40 -|2.3|(% style="width:662px" %)Несколько конкурирующих триггеров. 41 -Высокая интенсивность сигналов, высокая конкуренция за процесс. 42 -Для сглаживания конкуренции используется Wakeup lock (share блокировка минимизирует блокировку и сглаживает конкуренцию).|(% style="width:513px" %)__Триггеры <-> Процесс.__|+|-|-|+|+ 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" %) |+|-|-|+|+ 43 43 |3|(% style="width:662px" %)Периодическая проверка|(% style="width:513px" %)Процесс пробуждается каждые N timeout, используется только 1 timer trigger. См. [[Примеры>>doc:Проекты и репозитории.Библиотеки.Движок cccc1808\. ProcessEngine.Примеры.WebHome]] 1 (блок 2).|+|+|-|-|- 44 44 ))) 45 45 | |