Главная страница Взаимодействие нетривиальных процессов взаимодействие процессов Большинство нетривиальных программ пишутся с использованием одной из форм межпроцессного взаимодейсгвия (IPC - Interprocess Communication). Это естественное следствие принципа разработки, заключающегося в том, чго лучше создавать приложение, состоящее из отдельных взаимодействующих элементов, чем одну большую программу. Исторически разработка приложений пережила следующие этапы развития: 1. Сначала были большие цельные программы, которые делали все необходимое. Отдельные части программы реализовывались в виде функций, обменивавшихся информацией через аргументы, возвращаемые значения и глобальные переменные. 2. Потом стали создаваться небольшие программы, взаимодействующие друг с другом посредством различных средств IPC. Многие стандартные утилиты Unix были разработаны именно таким образом, причем для передачи информации использовались каналы интерпретатора. 3- Наконец, сейчас появилась возможность писать цельные программы, состоящие из взаимодействующих между собой потоков. В данном случае мы все равно применяем термин IPC, хотя процесс имеется только один. Комбинация последних двух вариантов также возможна: несколько процессов, каждый из которых состоит из нескольких потоков, вполне могут взаимодействовать между собой. Мы описываем возможность разделения решаемых задач между несколькими процессами или даже между пото1сами одного процесса. В мультипроцессорной системе такое приложение сможет выполняться гораздо быстрее, поэтому разделение задач между процессами способно повысить его быстродействие. В этой книге подробно описываются четыре формы IPC: 1. Передача сообщений (каналы, FIFO, очереди сообщений). 2. Синхронизация (взаимные исключения, условные переменные, блокировки чтения-записи, блокировка файлов и записей, семафоры). 3. Разделяемая память (неименованная и именованная). 4. Удаленный вызов процедур (двери, Sun RPC). Здесь не рассматриваются вопросы написания программ, взаимодействующих по сети. Такая форма взаимодействия обычно подразумевает использование интерфейса сокетов и стека протоколов TCP/IP; эти темы были подробно разобраны в первом томе книги ([24]). Предисловие 19 Нам могут возразить, что средства IPC, не предназначенные для взаимодействия по сети, вообще не следует использовать и что вместо этого следует изначально разрабатывать приложения с расчетом на использование в сети. Однако на практике средства IPC, работающие только в пределах одного узла, функционируют гораздо быстрее, чем сетевые, да и программы с их использованием оказываются проще. Разделяемая память и средства синхронизации обычно не могут использоваться по сети - они доступны только в пределах одного узла. Опыт и история показывают, что сущесгвует потребность в наличии как несетевых, так и сетевых форм IPC, В этой книге используется материал первого тома и других моих книг: UNIX Network Programming, том 1,1998 [24]; Advanced Programming in the UNIX Environment, 1992 [21]; TCP/IP Illustrated, том 1,1994 [22]; ш TCP/IP Illustrated, том 2, написанной в соавторстве с Гари Райтом (Gary Wright),1995, [27]; TCP/IP Illustrated, том 3,1996 [23]. Может показаться странным, что я описываю средства IPC в книге, заглавие которой содержит слова Network Programming*. Замечу, что IPC часто используется и в сетевых приложениях. Как говорилось в предисловии к книге *UNIX Network Programming* 1990 года издания, для понимания методов разработки сетевых приложений необходимо понимание средств межпроцессного взаимодействия (IPC) . Изменения со времени первого издания Этот том содержит полностью переписанные главы 3 и 18 книги UNIX Network Programming* 1990 года издания. Если подсчитать количество слов, объем материала увеличился в пять раз. Ниже перечислены основные отличия данного издания: ш в дополнение к трем формам System V IPC (очереди сообщений, семафоры, разделяемая память) рассматриваются более новые функции Posix, реализующие эти же три формы IPC. о стандартах Posix более подробно говорится в разделе 1.7. в будущем можно ожидать перехода к использованию функций Posix, обладающих определенными преимуществами по сравнению с аналогами System V. ш Рассматриваются средства синхронизации Posix: взаимные исключения, условные переменные, блокировки чтения-записи. Эти средства могут использоваться для синхронизации потоков или процессов и часто привлекаются для обеспечения синхронизации доступа к разделяемой памяти. ш в этом томе предполагается наличие поддержки потоков Posix (Pthreads), и многие примеры написаны с использованием многопоточного (а не многопроцессного) программирования. ш Описание именованных и неименованных каналов и блокировок записей основано на их определениях в стандарте Posix, В дополнение к описанию средств IPC и примерам их использования я также привожу примеры реализации очередей сообщений, блокировок чтения-записи и семафоров Posix (все это может быть скомпилировано в пользовательские библиотеки). Эти реализации задействуют множество разных средств одновременно. Например, одна из реализаций семафоров Posix использует взаимные исключения, условные переменные и отображение в память. В комментариях отмечаются важные моменты, которые следует учитывать при разработке приложений (ситуации гонок, обработка ошибок, утечка памяти, использование списков аргументов переменной длины). Понимание реализации какого-либо средства ведет к лучшему его использованию. ш При описании RPC основное внимание уделяется пакету Sun RPC. Рассказ предваряется описанием нового интерфейса дверей в Solaris, который похож на RPC, но используется только в пределах одного узла. Описание дверей является как бы введением, в котором описываются важные вопросы вызова процедур в других процессах без необходимости учитывать особенности сетевой реализации. Кому адресована эта книга? Эта книга может использоваться как учебник по IPC или как справочник для опытных программистов. Текст разделен на четыре части: ж передача сообщений; * синхронизация; ж разделяемая память; удаленный вызов процедур. Возможно, некоторые читатели будут интересоваться содержимым конкретных подразделов. Большая часть глав может читаться совершенно независимо от остальных, хотя в главе 2 объединены многие общие особенности средств Posix IPC, в главе 3 - System V IPC, а глава 12 является введением в разделяемую память (как Posix, так и System V). Всем читателям настоятельно рекомендуется прочесть главу 1, в особенности раздел 1.6, в котором описываются используемые в книге функции-обертки. Главы, описывающие средства Posix IPC, могут читаться отдельно от глав, посвященных System V IPC. Описание каналов и блокировок записей стоит особняком. Две главы, посвященные удаленному вызову процедур, также могут читаться отдельно от прочих. Подробный индекс упрощает использование книги в качестве справочника. Для читающих текст в случайном порядке приводятся многочисленные перекрестные ссылки на сходный материал. Исходный код и опечатки Исходный код всех примеров можно загрузить с домашней страницы автора (адрес - в конце предисловия). Лучший способ изучить IPC - это изменить про-
|
© 2000 - 2024 ULTRASONEX-AMFODENT.RU.
Копирование материалов разрешено исключительно при условии цититирования. |