Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы / часы_таймеры_потоки.DOC
Скачиваний:
32
Добавлен:
01.05.2014
Размер:
351.23 Кб
Скачать

Многопотоковое программирование

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

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

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

Многопотоковое программирование можно использовать для разработки приложений, которые могут выполняться параллельно. Эти приложения можно запускать на любых многопроцессорных системах, эффективно используя аппаратные ресурсы. В частности, если многопотоковое приложение запускается на системе с М процессорами, то все его потоки могут выполняться одновременно, каждый — на отдельном процессоре. Следовательно, производительность такого приложения можно увеличить в N раз, где N — максимальное число свободных в данный момент процессоров (N меньше или равно М).

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

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

Потоки выполнения отличаются от порожденных процессов создаваемых функцией API fork

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

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

• Функции exit или ехес, вызываемые потоком, завершают все потоки в этом процессе. Если же эти функции вызывает порожденный процесс, то на родительский процесс ее действие не распространяется.

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

Теперь перечислим преимущества многопотокового программирования;

• повышается производительность процессов и ускоряется реакция на действия пользователя;

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

• программистам могут структурировать код в независимо выполняемые компоненты;

• снижается необходимость использования функции fork для создания порожденных процессов и таким образом увеличивается производительность каждого процесса (реже выполняется переключение контекста); в управлении выполнением потоков в меньшей степени участвует ядро системы;

многопотоковое программирование — оптимальный способ повышения производительности объектно-ориентированных приложений, рассчитанных на использование в многопроцессорных системах.

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

Соседние файлы в папке Материалы