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

От версии 1.10
отредактировано Alexandr Fokin
на 2026/05/07 14:21
Изменить комментарий: К данной версии нет комментариев
К версии 1.23
отредактировано Alexandr Fokin
на 2026/06/18 22:07
Изменить комментарий: Update document after refactoring.

Сводка

Подробности

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