Потоковыми сообщениями называются сообщения, реализующие передачу производных значений общих переменных из одного процесса в другие. Потоковые сообщения передаются и принимаются через порты процессов.
Каждому потоковому сообщению ставятся в соответствие:
Существуют следующие вспомогательные разновидности потоковых сообщений:
Потоковые сообщения, отличные от пустых, называются "непустыми". Значения непустых потоковых сообщений называются "непустыми" значениями.
Различаются два сорта потоковых сообщений - "защищенное" и "незащищенное". Использование двух разновидностей сообщений необходимо для управления передачей потоковых сообщений между процессами. В ходе передачи потоковых сообщений из некоторого процесса G незащищенное сообщение не может изменить глобальное значение, переданное в виде защищенного сообщения из какого-либо другого процесса (отличного от G).
Потоковое сообщение является защищенным (относится к сорту "защищенное"), если оно непустое и было отправлено (передано) через защищающий порт. В остальных случаях потоковое сообщение является незащищенным (относится к сорту "незащищенное"). В частности, сорт пустого сообщения всегда "незащищенное". В дальнейшем мы будем использовать специальное обозначение - функцию "сорт потокового сообщения", реализующую описанные выше правила и зависящую от значения A сообщения и сорта порта R: sort_of_flow_message(A,R).
Передача непустых переключающих потоковых сообщений из процесса осуществляется каждый раз при переходе этого процесса в состояние "доказанный", за исключением фаз процесса, закончившихся поглощением принятого процессом сообщения.
Передача пустых сообщений из процесса осуществляется каждый раз при переходе этого процесса из состояния "доказанный" в состояние "неудачный" или "неиспользуемый". Передача пустых сообщений из процесса называется "освобождением" общих переменных.
Будем придерживаться следующих обозначений: sort(X) - "сорт X", state(X) - "состояние X", creator(X) - "производитель, построивший X", X==Y - "возможна унификация термов X и Y", X<>Y - "X не равно Y", X:=Y - "X получает значение Y".
Передача потоковых сообщений осуществляется следующим образом:
Последовательности действий, осуществляемых на этапах (2), (3), (4i) не могут быть прерваны никакими операциями, осуществляемыми другими процессами, использующими те же операнды.
Признаком получения некоторым процессом H потокового сообщения является наличие у процесса несогласованного порта. В случае получения процессом потокового сообщения, он осуществляет обработку этого сообщения.
Если процесс получил задерживающее значение через некоторый отключающий порт, обработка любых сообщений этим процессом откладывается, а процесс переводится в состояние "неиспользуемый". В дальнейшем, процесс будет автоматически возвращен в состояние "используемый", как только значения всех его отключающих портов перестанут быть задерживающими (см. свойства отключающих портов в разделе 5.2.2).
При переходе процесса H из состояния "неиспользуемый" в состояние "сформированный", автоматически вызывается формирование процессов, которые еще не были сформированы, создателем которых является процесс H.
Если процессу необходимо обработать несколько переключающих потоковых сообщений, осуществляется их одновременная обработка ("интерференция" потоковых сообщений).
Обработка потоковых сообщений некоторым процессом H включает следующие действия:
Специальной разновидностью переключающих потоковых сообщений является "инициализирующее" сообщение, автоматически получаемое каждым новым процессом. Инициализирующее сообщение считается полученным процессом независимо от того, имеет ли он какие-либо порты, а также от состояния этих портов. При этом, однако, осуществляется интерференция инициализирующего сообщения с любыми другими переключающими потоковыми сообщениями, а обработка инициализирующего сообщения происходит по общим правилам обработки потоковых сообщений.
Примечание. Рекомендуемое графическое обозначение для переключающих потоковых сообщений:
+----------+ +----------+ | | | | | Источник +------------->| Приемник | | | | | +----------+ +----------+
Ссылки: активизация порта 5.2.2, актор 7.1, анонимная переменная 2.1.1, глобальные значения 7.2, доказанный процесс 5.2.1, доказательство актора 6.3.1, задерживающие значения 6.3.2, защищающий порт 5.2.2, значение порта 5.2.2, значение терма 3, исполнение конструктора 5.4.1, исполнение процесса 5.2, используемый процесс 5.2.1, конструктор процесса 4.1.3, мир 5.1, неиспользуемый процесс 5.2.1, несогласованный порт 5.2.2, неудачный процесс 5.2.1, обработка сообщения 7.4, общие переменные 7.2, отключающий порт 5.2.2, переключающие сообщения 7.4.1, переменная 2.1.1, поглощение сообщений 7.4.1, порт 5.2.2, производитель значения порта 5.2.2, производные значения 7.2, простой порт 5.2.2, процесс 5.2, согласование акторов 7.3, согласованный порт 5.2.2, создатель процесса 5.2, сообщение 7.4, сорт глобального значения 7.2, сорт значения порта 5.2.2, сорт порта 5.2.2, состояние порта 5.2.2, состояние процесса 5.2.1, сформированный процесс 5.2.1, терм 3, унификация 3.3, фаза 5.2, фиксированное значение 7.2, формирование миров 5.4.1, формирование процесса 5.4.1, goal 5.4.1.
Следующий:
7.5. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ
Предыдущий:
7.4.2. ПРЯМЫЕ СООБЩЕНИЯ
7.4. СОГЛАСОВАНИЕ ПРОЦЕССОВ
КОРНЕВАЯ СТРАНИЦА
ОГЛАВЛЕНИЕ
СПИСОК ПОНЯТИЙ ЯЗЫКА (ИНДЕКС)