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

Версия 7.7 от Alexandr Fokin на 2026/05/17 10:38

 Про передачу сигнала на процесс (2.3)
Схема конкурентного взаимодействия между триггером и процессом.
Решаемые задачи
  1. Избежание избыточных блокировок и избыточных ожиданий блокировок.
    1. Триггер не пытается взять блокировку над процессом лишний раз, если процесс выполняется.
      (Информация о выполнении процесса считывается из Wakeup state (без взятия блокировки процесса). Если процесс выполняется, то сигнал считается доставленным и никаких обновлений не требуется).
    2. Гарантированная доставка сигнала от триггера до процесса (сигнал не будет потерян) и процесс будет пробужден и продолжит выполнение (Синхронизация проверки условия Wakeup condition, гарантия что сигнал не будет утерян).
    3. Конкуренция между триггерами и процессом.

Решает 2 задачи:
1) Информация о выполнении процесса считывается из Wakeup state (без взятия блокировки процесса). Если процесс выполняется, то сигнал считается доставленным и никаких обновлений не требуется.
2) Синхронизация проверки условия Wakeup condition, гарантия что сигнал не будет утерян.
В конце сессии обработки процесса Wakeup state блокируется и только после этого проверяется условие наличие новых сигналов Wakeup condition, это гарантирует что ни один поступивший сигнал не будет утерян.

Такой подход позволяет минимизировать ожидание на блокировках.

СКонкурентная доставка сигнала в процесс.Sequence.png