Читать «UNIX: взаимодействие процессов» онлайн - страница 299

Уильям Ричард Стивенс

Эпилог

В этой книге подробно описаны четыре средства межпроцессного взаимодействия (IPC):

1. Передача сообщений (именованные и неименованные каналы, очереди сообщений Posix и System V).

2. Синхронизация (взаимные исключения и условные переменные, блокировки чтения-записи, блокировки файлов и записей, семафоры Posix и System V).

3. Разделяемая память (неименованная, именованная стандартов Posix и System V).

4. Вызовы процедур (двери в системе Solaris, пакет Sun RPC).

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

После прочтения 16 глав возникает естественный вопрос: какую форму IPC следует использовать для решения какой-либо конкретной задачи? К сожалению, универсального метода не существует. Огромное количество средств IPC в Unix возникло благодаря тому, что нет какого-либо единственного средства, которым можно было бы решить все задачи (или хотя бы большинство). Все, что вам остается, — это познакомиться с особенностями всех форм IPC и учитывать их при разработке вашего приложения.

Прежде всего перечислим главные по важности моменты, которые следует учесть при выборе средств организации IPC для приложения.

1. Сетевое или несетевое. Мы предполагаем, что это решение уже принято и IPC используется между процессами или потоками, выполняющимися на одном узле. Если есть вероятность того, что приложение будет распределено между несколькими узлами, следует рассмотреть возможность использования сокетов вместо IPC, чтобы впоследствии легко было переделать приложение в сетевое.

2. Переносимость (вспомните табл. 1.3). Практически все системы под управлением Unix поддерживают именованные и неименованные каналы и блокировку записей стандарта Posix. К 1998 году большинство систем поддерживало средства IPC System V (очереди сообщений, семафоры и разделяемую память), тогда как лишь немногие поддерживали те же средства стандарта Posix. Должны появиться новые реализации Posix IPC, но, к сожалению, эти средства не являются обязательными в стандарте Unix 98. Многие системы поддерживают потоки Posix (включая взаимные исключения и условные переменные) или станут поддерживать их в ближайшем будущем. Некоторые системы, поддерживающие потоки Posix, не воспринимают атрибут использования между процессами для взаимных исключений и условных переменных. Блокировки чтения-записи, требуемые стандартом Unix 98, должны вскоре войти в стандарт Posix, и множество систем уже поддерживают какой-либо из видов таких блокировок. Отображение в память распространено достаточно широко, и большинство Unix-систем поддерживают неименованное отображение (с использованием либо /dev/zero, либо MAP_ANON). Средства Sun RPC должны быть доступны практически на всех системах Unix, тогда как двери пока реализованы только в Solaris.