[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Достоинства нитей

Ниже перечислены преимущества применения программ с несколькими нитями:

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

Принципы параллельного программирования

У параллельного программирования есть два основных преимущества перед последовательными технологиями:

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

Модульность

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

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

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

Программные модели

С помощью нитей можно реализовать следующие общие программные модели:

Все эти модели требуют создания модульных программ. Для эффективного решения сложных задач модели можно комбинировать.

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

Модель главный-подчиненный элемент

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

Примером данной модели может являться программа буферизации задания печати, управляющая группой принтеров. Задача программы буферизации - обеспечить последовательную обработку полученных запросов на печать. При получении запроса главный модуль выбирает принтер и передает подчиненному элементу команду печати задания на этом принтере. Каждый подчиненный модуль за один вызов печатает на одном принтере одно задание, управляя потоком данных и другими параметрами печати. Программа буферизации может поддерживать отмену обработки заданий или другие функции, которые требуют прерывания работы подчиненных модулей или переназначения заданий.

Модели разделения действий

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

Примером модели разделения действий может служить следующая параллельная реализация команды grep. Сначала команда grep определяет пул файлов для просмотра. После этого она создает группу модулей. Каждый модуль обрабатывает отдельный файл из этого пула и ищет в нем заданный шаблон, передавая результаты на общее устройство вывода. После просмотра выделенного ему файла модуль получает другой файл из пула или завершает работу, если пул пуст.

Модели изготовитель-потребитель

Модель изготовитель-потребитель (иногда она называется конвейером) обычно применяется в производстве. Эта модель подразумевает, что некий продукт проходит несколько этапов обработки от простого объединения исходных компонентов до стадии готовности. Обычно такой продукт изменяется и передается на следующий этап обработки одним рабочим. В компьютерных терминах удачным примером этой модели могут служить команды конвейерной обработки AIX, например cpio.

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

Информация о производительности

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

Управление нитями

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

API библиотеки работы с нитями также проще в использовании, чем API управления процессами. При работе с функцией exec программисту приходится выбирать один из шести способов ее вызова. Для создания нити достаточно знать один синтаксис функции pthread_create.

Взаимодействие нитей

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

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

Многопроцессорные системы

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

Ограничения

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

Многие идентификаторы, ресурсы, признаки состояния и ограничения операционной системы определены на уровне процессов и, таким образом, используются совместно всеми нитями процесса. Например, ИД групп и пользователей, а также связанные с ними права доступа обрабатываются на уровне процесса. В программах, в которых различным модулям требуется присвоить различные идентификаторы, приходится использовать несколько процессов, вместо одного процесса с несколькими нитями. Другими примерами могут служить атрибуты файловой системы, такие как текущий рабочий каталог, а также состояние и максимальное число открытых файлов. Если для выполнения задачи предпочтительна независимая обработка этих атрибутов, то программы с несколькими нитями могут оказаться неподходящими. Например, программа с несколькими процессами допускает открытие каждым процессом большого числа файлов без согласования с другими процессами.

Связанная информация

Глава 9, Параллельное программирование

В руководстве AIX 5L Version 5.1 Performance Management Guide подробно описан планировщик CPU.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]