Конспект установочных лекций по комплексному курсу Информатика, Теория информации



         

О языках программирования в курсе “Информатика” - часть 2


channel m с;

var m x, var m z := x0, z0;

while b(x) do receive x on c;

consume (x)

od

while b(z) do produce_next(z);

send z on с

od

Здесь consume и poduce_next - заданные процедуры, a b - булевская функция. операторов.

Различают два основных способа обмена сообщениями между отправителем и получателем:

(1)

неявные буферы: готовый к посылке передающий процесс не должен ждать готовности к приему принимающего процесса. Сообщение посылается немедленно, и в случае необходимости оно помещается на промежуточное хранение, после чего посылающий процесс продолжает свою работу. Соответствующие события отправителя и получателя находятся в причинной связи. Посылка является причиной для получения;

(2)   рандеву («рукопожатие»): посылающий процесс ждет, пока принимающий процесс будет готов к приему сообщения. Обмен информацией имеет место в событии, после чего оба процесса продолжают свою работу. Обмен сообщениями соответствует общему событию.

В случае (1) говорят об асинхронной,

а в случае (2) - о синхронной передаче. Р

Для обсуждения различных концепций обмена сообщениями введем две синтаксические формы. В дальнейшем будем использовать операторы send Е on с и соответственно receive x on с для асинхронного обмена сообщениями с неявными буферами. Будем писать Е | с для синхронного действия посылки х ? с для синхронного действия приема при обмене сообщениями через рандеву.

При этом соглашении пример производитель/потребитель в нотации рандеву может быть записан следующим образом:

channel m c;

var m x, var m x:=х0, x0

while b(x) do x ? c;

consume (x)

od

while b(x) do produce next(x);

z ^ c

od

Для задачи производитель/потребитель интерпретация рандеву допускает по сути дела только единственный ход работы. Неявные буферы допускают значительно больший параллелизм, чем синхронный обмен сообщениями.

Единственное ограничение в параллельной работе обоих последовательных процессов здесь состоит в том, что сообщение не может быть принято до того, как оно будет послано.Действие посылки является причинным предположением для соответствующего действия по приему сообщения.

Если от параллельной программы Р, в которой обмен сообщениями осуществляется по принципу неявного буфера, переходим к программе Р', осуществляющей обмен по принципу рандеву, то получается следующее отношение между этими программами:

(1)   Каждый свободный от тупиков ход работы программы р' есть линеаризация хода работы р, причем действия посылки/приема сообщений могут толковаться как одно действие.

(2)   Определенные ходы работы р и их линеаризации исключаются как ходы работы р'.

(3)   Р' возможно, приведет к тупикам, которые исключены для Р.

Неявные буферы реже приводят к тупикам, однако, требуется больше места в памяти для промежуточного хранения сообщений.




Содержание  Назад  Вперед