Читаем Linux API. Исчерпывающее руководство полностью

Производительность

В некоторых ситуациях разные IPC-механизмы могут демонстрировать существенные различия в производительности. Однако в последующих главах мы воздержимся от сравнений в этом контексте по нескольким причинам:

• производительность IPC-механизма может не оказывать заметного влияния на общую производительность приложения и не быть единственным фактором при выборе средства межпроцессного взаимодействия;

• относительная производительность различных IPC-механизмов может варьироваться в зависимости от реализации UNIX или версии ядра Linux;

• и самое важное: производительность IPC-механизма зависит от того, как именно и в какой среде его используют. Это относится к объему данных, передаваемых в каждой IPC-операции, необходимости переключения контекста процесса при передаче каждой порции данных и общей загруженности системы.

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


43.5. Резюме


В этой главе мы кратко рассмотрели различные механизмы, которые могут применяться для синхронизации процессов (и потоков) и их взаимодействия.

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

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

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


43.6. Упражнения


43.1. Напишите программу, измеряющую пропускную способность каналов. В качестве аргументов командной строки она должна принимать количество блоков данных, которые нужно послать, и размер каждого такого блока. После создания канала программа делится на два процесса: дочерний, записывающий блоки данных в канал с максимально возможной скоростью, и родительский, считывающий данные блоки. После прочтения всей информации родительский процесс должен вывести время, которое ему для этого понадобилось, а также скорость передачи данных (в байтах в секунду). При измерении пропускной способности используйте разные размеры блоков.

43.2. Повторите предыдущее упражнение для очередей сообщений в System V и POSIX, а также для сокетов UNIX- и интернет-доменов. Примените все эти программы для сравнения относительной производительности различных IPC-механизмов в Linux. Если у вас есть доступ к другим UNIX-системам, выполните аналогичное сравнение и в них.

44. Каналы и очереди FIFO

Эта глава посвящена каналам и очередям FIFO. Каналы являются наиболее старым средством межпроцессного взаимодействия в UNIX-системах; они появились в третьем издании UNIX в начале 1970-х. Этот механизм предоставляет элегантное решение распространенной задачи: имея два процесса, выполняющие две разные программы (команды), нужно сделать так, чтобы командная оболочка направила вывод одного из них в ввод другого. Каналы могут использоваться для передачи данных между родственными процессами (мы проясним значение слова «родственные» чуть позже). Очереди FIFO — одна из вариаций концепции каналов. Их важной особенностью является то, что их можно применять для организации взаимодействия любых процессов.


44.1. Краткий обзор


Любому пользователю командной оболочки встречались команды с применением каналов. Например, команда, представленная ниже, считает количество файлов в каталоге:

$ ls | wc — l

Для выполнения данной команды командная оболочка создает два процесса и выполняет в них соответственно утилиты ls и ws (это делается с помощью вызовов fork() и exec(), описанных в главах 24 и 27). На рис. 44.1 показано, как оба процесса используют канал.

Помимо прочего, рис. 44.1 иллюстрирует то, почему каналы (англ. pipe — «труба») получили такое название. Мы можем рассматривать их как фрагмент трубы, которая позволяет пропускать через себя потоки данных, направляя их от одного процесса к другому.



Рис. 44.1.Использование канала для соединения двух процессов


Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных