- код возврата. Таким образом, неблокирующие RPC имеют важное значение,
с точки зрения гарантии живучести системы.
5. Сравнение методов синхронизации и обмена данными Может
показаться, что основные задачи, связанные с параллельным
программированием, взаимным исключением, синхронизацией и коммуни-
кациями между процессами, имеют мало общего, но, в сути - это просто раз-
ные способы достижения одной цели. Методы синхронизации можно ис-
пользовать для организации взаимного исключения и коммуникаций. Анало-
гично, с помощью техники коммуникаций между процессами можно реали-
зовать функции синхронизации и взаимного исключения процессов.
Например, семафор эквивалентен почтовому ящику, в котором накап-
ливаются сообщения нулевой длины, - операции signal и wait эквивалентны
операциям put и get почтового ящика, а текущее значение семафора эквива-
лентно числу помещенных в почтовый ящик сообщений. Аналогично можно
организовать взаимное исключение и защиту ресурсов с помощью почтовых
ящиков. В этом случае сообщение выполняет функцию "маркера". Процесс,
получивший этот "маркер", приобретает право входить в критическую сек-
цию или распоряжаться ресурсами системы. При выходе из секции или осво-
бождении ресурса процесс помещает "маркер" в почтовый ящик. Следующий
процесс читает из почтового ящика, получает "маркер" и может войти в кри-
тическую секцию.
Связь между разными подходами имеет практическое значение в том
случае, если в системе применяется только один из них, а все остальные
нужно строить на его основе. Современные операционные системы, поддер-
живающие многозадачный режим и операции в реальном времени, применя-
ют все упомянутые методы. Передача сообщений и доступ к общим областям
памяти медленнее, чем проверка и обновление семафора и переменной собы-
тия, и требует дополнительных накладных расходов. Если есть выбор между
различными методами синхронизации и взаимодействия, следует использо-
вать тот из них, который лучше решает конкретную проблему - результи-
рующая программа будет понятнее и, возможно, быстрее работать. Кроме то-
го, весьма важно оценить, насколько эффективно в имеющейся программной
среде реализуются конкретные решения. Следует избегать незнакомых и не-
естественных конструкций.
В распределенных системах всегда существует риск потерять сообще-
ние в сети. Если сетевая система сконфигурирована так, что она контролиру-
ет правильность передачи сообщения, и имеются средства для повторной пе-
редачи утраченных сообщений, то прикладная программа не должна осуще-
ствлять дополнительные проверки. Обычно нижний уровень операционной
системы и процедуры сетевого интерфейса передают на более высокий
уровень код возврата, который прикладная программа должна проверить,
чтобы убедиться, была ли попытка успешной или нет, и при необходимости
повторить ее.
Если контроль не предусмотрен, например, используется служба IP
без транспортного протокола TCP, то прикладная программа несет