Книга: Искусство программирования для Unix
3.1.3. Взаимодействующие процессы
3.1.3. Взаимодействующие процессы
В случае Unix малозатратное создание дочерних процессов (Process-Spawning) и простое межпроцессное взаимодействие (Inter-Process Communication — IPC) делают возможным использование целой системы небольших инструментов, каналов и фильтров. Данная система будет рассматриваться в главе 7; здесь необходимо указать некоторые последствия дорогостоящего создания дочерних процессов и IPC.
Канал был технически тривиален, но производил мощный эффект. Однако он никогда не стал бы простым без фундаментальной унифицирующей идеи процесса как автономной вычислительной единицы с программируемым управлением. В операционной системе Multics командный интерпретатор представлял собой просто другой процесс; управление процессами "не пришло свыше" вписанным в JCL.
Если операционная система характеризуется дорогостоящим созданием новых процессов и/или управление процессами является сложным и негибким, то, как правило, проявляются описанные ниже последствия.
• Более естественным способом программирования становятся монолитные гигантские конструкции.
• Большая часть политики должна быть реализована внутри этих монолитов. Это подталкивает к использованию С++ и замысловатой многослойной внутренней организации кода, вместо С и относительно простых внутренних иерархий.
• Когда процессы не могут избежать взаимодействия, они производят обмен данными посредством механизмов, которые являются громоздкими, неэффективными и небезопасными (например, с помощью временных файлов), или путем сохранения чрезмерно большого количества сведений о реализациях других процессов.
• Мультипроцессная обработка (multithreading) широко применяется для задач, которые в Unix обрабатывались бы с помощью множества сообщающихся друг с другом легковесных процессов.
• Возникает необходимость изучения и использования асинхронного ввода-вывода.
Существует ряд примеров общих стилистических особенностей (даже в прикладном программировании), которые возникают в связи с ограничениями операционной системы.
Неочевидным, но важным свойством каналов и других классических IPC-методов Unix является то, что они требуют такой уровень простоты обмена данными между программами, который побуждает разделение функции. Напротив, отсутствие эквивалента каналов проявляется в том, что взаимодействие программ может быть реализовано только путем внедрения в них полного объема сведений о внутреннем устройстве друг друга.
В операционных системах без гибкого IPC-механизма и прочной традиции его использования программы обмениваются данными путем совместного применения сложных структур данных. Поскольку проблему связи необходимо решать заново для всех программ каждый раз при добавлении новой программы в набор, сложность данного решения возрастает как квадрат числа взаимодействующих программ. Еще хуже то, что любое изменение в одной из открытых структур данных может вызвать неочевидные ошибки в неопределенно большом числе других программ.
Word, Excel, PowerPoint и другие программы Microsoft обладают детальными, можно сказать безграничными, знаниями о внутреннем устройстве друг друга. В Unix программист пытается разрабатывать программы не только для взаимодействия друг с другом, но и с еще не созданными программами.
Данная тема также затрагивается в главе 7.
Для создания системы, абсолютно противоположной Unix, следует делать создание дочерних процессов очень дорогостоящим, управление процессами сложным и негибким, и оставлять IPC-механизм как неподдерживаемый или как наполовину поддерживаемое запоздалое решение.
- 3.1.1. Унифицирующая идея операционной системы
- 3.1.2. Поддержка многозадачности
- 3.1.3. Взаимодействующие процессы
- 3.1.4. Внутренние границы
- 3.1.5. Атрибуты файлов и структуры записи
- 3.1.6. Двоичные форматы файлов
- 3.1.7. Предпочтительный стиль пользовательского интерфейса
- 3.1.8. Предполагаемый потребитель
- 3.1.9. Входные барьеры для разработчика
- Рабочие процессы
- При завершении работы Windows сообщает, что некоторые процессы не отвечают, и компьютер не выключается. Как завершать та...
- 3.4. Процессы
- Процессы
- Программы и процессы
- Системные процессы
- Прикладные процессы
- Процессы, ограниченные скоростью ввода-вывода и скоростью процессора
- ГЛABA 6 Процессы, потоки и задания
- Процессы и потоки Windows
- Процессы в многопроцессорной среде
- Холистический и аналитический процессы