Каналы
Понятие канала используется
для описания событий, называемых взаимодействиями, которые состоят
в передаче сообщений между процессами. Каналы используются для
передачи сообщений в одном направлении и только между двумя процессами.
Канал, используемый процессом только для вывода сообщений, называется
выходным каналом этого процесса, а используемый только для ввода
- входным каналом.
Итак, канал - это однонаправленная
двухточечная (соединяющая только два процесса) "коммуникационная
линия", позволяющая процессам обмениваться данными. Операции
обмена сообщениями достаточно продолжительные по времени операции,
поэтому в разных моделях, системах используются разные типы поведения
операций приема/передачи сообщений. Различают следующие виды каналов:
- Синхронные.
Отправив
сообщение, передающий процесс ожидает от принимающего подтверждение
о приеме сообщения прежде, чем послать следующее сообщение, т.е.
принимающий процесс не выполняется, пока не получит данные, а
передающий - пока не получит подтверждение о приеме данных.
- Асинхронно/синхронные.
Операция
передачи сообщения асинхронная - она завершается сразу (сообщение
копируется в некоторый буфер, а затем пересылается одновременно
с работой процесса-отправителя), не ожидая того, когда данные
будут получены приемником.
Операция приема сообщения синхронная: она блокирует процесс до
момента поступления сообщения.
- Асинхронные.
Обе
операция асинхронные, то есть они завершаются сразу. Операция
передачи сообщения работает, как и в предыдущем случае. Операция
приема сообщения, обычно, возвращает некоторые значения, указывающие
на то, как завершилась операция - было или нет принято сообщение.
В некоторых реализациях операции обмена сообщениями активируют
сопроцессы, которые принимают/отправляют сообщения, используя
временные буфера и соответствующие синхронные операции. В этом
случае имеется ещ§ синхронизирующая операции, которая блокирует
процесс до тех пор, пока не завершатся все инициированные операции
канала.
При работе с каналами
необходимо следить за тем, чтобы не случилась блокировка
взаимодействующих процессов (дедлок). Например, процесс
A не может передать сообщение процессу B, поскольку
процесс B ждет, когда процесс A примет сообщение
от него. Это одна из простейших ситуаций, в более сложных случаях
циклические зависимости могут охватывать много процессов, причем
появление дедлока может завесить от данных.