Взаимодействие – обмен сообщениями
В предыдущих разделах было введено и проиллюстрировано общее понятие события как действия, не имеющего протяженности во времени, наступление которого может требовать одновременного участия более чем одного независимо описанного процесса. В этом разделе внимание будет сосредоточено на одном специальном классе событий, называемых взаимодействиями. Взаимодействие состоит в передаче сообщений и является событием, описываемым парой c.v, где c – имя канала по которому происходит взаимодействие, а v – значение передаваемого сообщения. Такое обозначение мы уже использовали – это описание процесса КОПИБИТ (см. пример 3.3).
Различают следующие виды каналов:
§ Синхронные.Отправив сообщение, передающий процесс ожидает от принимающего подтверждение о приеме сообщения прежде, чем послать следующее сообщение, т.е. принимающий процесс не выполняется, пока не получит данные, а передающий - пока не получит подтверждение о приеме данных.
§ Асинхронно/синхронные. Операция передачи сообщения асинхронная - она завершается сразу (сообщение копируется в некоторый буфер, а затем пересылается одновременно с работой процесса-отправителя), не ожидая того, когда данные будут получены приемником. Операция приема сообщения синхронная: она блокирует процесс до момента поступления сообщения.
§ Асинхронные. Обе операция асинхронные, то есть они завершаются сразу. Операция передачи сообщения работает, как и в предыдущем случае. Операция приема сообщения, обычно, возвращает некоторые значения, указывающие на то, как завершилась операция - было или нет принято сообщение.
В некоторых реализациях операции обмена сообщениями активируют сопроцессы, которые принимают/отправляют сообщения, используя временные буфера и соответствующие синхронные операции. В этом случае имеется еще синхронизирующая операции, которая блокирует процесс до тех пор, пока не завершатся все инициированные операции канала.
Множество всех сообщений, с помощью которых Р может осуществлять взаимодействие по каналу с, определяется как
aс(Р) = {v | c.v aP}.
Кроме того, определены функции, выбирающие имя канала канал(c.v) = c и значение сообщения сообщ(c.v) = v.
Каналы используются для передачи сообщений только в одном направлении и только между двумя процессами.
Дата добавления: 2015-07-18; просмотров: 950;