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