Параллелизм (программа)

Параллелизм (программа)
Не следует путать с термином «Поток данных».

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

Такие потоки называют также потоками команд (в противоположность потокам данных) или (реже) потоками выполнения (от англ. thread of execution); иногда называют «нитями» (буквальный перевод англ. thread) или неформально «тредами».

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

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

К достоинствам многопоточности в программировании можно отнести следующее:

  • Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.
  • Меньшие относительно процесса временны́е затраты на создание потока.
  • Повышение производительности процесса за счет распараллеливания процессорных вычислений и операций ввода/вывода.

Содержание

Типы реализации потоков

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

Достоинства и недостатки этого типа следующие:

Достоинства

  1. Возможность реализации на ядре не поддерживающем многопоточность
  2. Более быстрое переключение, создание и завершение потоков
  3. Процесс может иметь собственный алгоритм планирования.

Недостатки

  1. Отсутствие прерывания по таймеру внутри одного процесса
  2. При использовании блокирующего системного запроса для процесса все его потоки блокируются.
  3. Сложность реализации
  • Поток в пространстве ядра. Наряду с таблицей процессов в пространстве ядра имеется таблица потоков.
  • «Волокна» (fibers). Несколько потоков режима пользователя, исполняющихся в одном потоке режима ядра. Поток пространства ядра потребляет заметные ресурсы, в первую очередь физическую память и диапазон адресов режима ядра для стека режима ядра. Поэтому было введено понятие «волокна» — облегчённого потока, выполняемого исключительно в режиме пользователя. У каждого потока может быть несколько «волокон».

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

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

  • Взаимоисключения (mutex, мьютекс) — это объект синхронизации, который устанавливается в особое сигнальное состояние, когда не занят каким-либо потоком. Только один поток владеет этим объектом в любой момент времени, отсюда и название таких объектов (от английского mutually exclusive access - взаимно исключающий доступ) — одновременный доступ к общему ресурсу исключается. После всех необходимых действий мьютекс освобождается, предоставляя другим потокам доступ к общему ресурсу.
  • Семафоры представляют собой доступные ресурсы, которые могут быть приобретены несколькими потоками в одно и то же время, пока пул ресурсов не опустеет. Тогда дополнительные потоки должны ждать, пока требуемое количество ресурсов не будет снова доступно. Семафоры очень эффективны, поскольку они позволяют одновременный доступ к ресурсам.
  • События. Объект, хранящий в себе 1 бит информации "просигнализирован или нет", над которым определены операции "просигнализировать", "сбросить в непросигнализированное состояние" и "ожидать". Ожидание на просигнализированном событии есть отсутствие операции с немедленным продолжением исполнения потока. Ожидание на не-просигнализированном событии приводит к приостановке исполнения потока до тех пор, пока другой поток (или же вторая фаза обработчика прерывания в ядре ОС) не просигнализирует событие. Возможно ожидание нескольких событий в режимах "любого" или "всех". Возможно также создания события, автоматически сбрасываемого в непросигнализированное состояние после пробуждения первого же - и единственного - ожидающего потока (такой объект используется как основа для реализации объекта "критическая секция"). Активно используются в MS Windows, как в режиме пользователя, так и в режиме ядра.
  • Критические секции обеспечивают синхронизацию подобно мьютексам за исключением того, что объекты, представляющие критические секции, доступны в пределах одного процесса. События, мьютексы и семафоры также можно использовать в однопроцессном приложении, однако критические секции обеспечивают более быстрый и более эффективный механизм взаимно-исключающей синхронизации - операции "получить" и "освободить" на критической секции оптимизированы для случая единственного потока (отсутствия конкуренции) с целью избежать любых ведущих в ядро ОС системных вызовов. Подобно мьютексам объект, представляющий критическую секцию, может использоваться только одним потоком в данный момент времени, что делает их крайне полезными при разграничении доступа к общим ресурсам.
  • Условные переменные (condvars). Сходны с событиями, но не являются объектами, занимающими память - используется только адрес переменной, понятие "содержимое переменной" не существует, в качестве условной переменной может использоваться адрес произвольного объекта. В отличие от событий, установка условной переменной в просигнализированное состояние не влечет за собой никаких последствий в случае, если на данный момент нет потоков, ожидающих на переменной. Установка события в аналогичном случае влечет за собой запоминание состояния "просигнализировано" внутри самого события, после чего следующие потоки, желающие ожидать события, продолжают исполнение немедленно без остановки. Для полноценного использования такого объекта необходима также операция "освободить mutex и ожидать условную переменную атомарно". Активно используются в
  • Порт завершения ввода-вывода (IO completion port, IOCP). Реализованный в ядре ОС и доступный через системные вызовы объект "очередь" с операциями "поместить структуру в хвост очереди" и "взять следующую структуру с головы очереди" - последний вызов приостанавливает исполнение потока в случае, если очередь пуста, и до тех пор, пока другой поток не осуществит вызов "поместить". Главнейшей особенностью IOCP является то, что структуры в него могут помещаться не только явным системным вызовом из режима пользователя, но и неявно внутри ядра ОС как результат завершения асинхронной операции ввода-вывода на одной из дескрипторов файлов. Для достижения такого эффекта необходимо использовать системный вызов "связать дескриптор файла с IOCP". В этом случае помещенная в очередь структура содержит в себе код ошибки операции ввода-вывода, а также, для случая успеха этой операции - число реально введенных или выведенных байт. Реализация порта завершения также ограничивает число потоков, исполняющихся на одном процессоре/ядре после получения структуры из очереди. Объект специфичен для MS Windows, и позволяет обработку входящих запросов соединения и порций данных в серверном программном обеспечении в архитектуре, где число потоков может быть меньше числа клиентов (нет требования создавать отдельный поток с расходами ресурсов на него для каждого нового клиента).

Критика терминологии

Перевод английского термина thread как "поток" в контексте, связанном с программированием, противоречит его же переводу "нить" в общеязыковом контексте, а также создает коллизии с термином stream ("поток").

По некоторым сведениям, этот неудачный перевод зародился во второй половине 1990х годов в кругах, близких к российскому офису компании

См. также


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Параллелизм (программа)" в других словарях:

  • TORQUE (программа) — TORQUE Тип распределенные вычисления Разработчик Cluster Resources, Inc. Написана на ANSI C Операционная система Unix подобная Языки интерфейса Английский Первый выпуск …   Википедия

  • Maui (программа) — См. также: Мауи MAUI CLUSTER SCHEDULER™ Тип Планировщик задач Разработчик Cluster Resources, Inc. Операционная система Linux, AIX, OSF/Tru 64, Solaris, HP UX, IRIX, FreeBSD и другие UNIX подобные ОС Последняя версия 3.3 (2005) Состояние …   Википедия

  • Параллельные вычислительные системы — Не следует путать с Распределённые вычисления. Параллельные вычислительные системы  это физические компьютерные, а также программные системы, реализующие тем или иным способом параллельную обработку данных на многих вычислительных узлах.[1]… …   Википедия

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

  • ИОАННА БОГОСЛОВА ОТКРОВЕНИЕ — последняя книга НЗ и всей христианской Библии. В рукописной традиции встречается не менее 60 вариантов ее наименования (Hoskier. 1929. Vol. 2. P. 25 27). В самых ранних рукописях (Синайском ( ) и Александрийском (А) кодексах) содержится краткое… …   Православная энциклопедия

  • Модель акторов — В компьютерных науках модель акторов представляет собой математическую модель параллельных вычислений, которая трактует понятие «актор» как универсальный примитив параллельного численного расчёта: в ответ на сообщения, которые он получает, актор… …   Википедия

  • ВИЗАНТИЙСКАЯ ИМПЕРИЯ. ЧАСТЬ IV — Изобразительное искусство является важнейшей по значению в христ. культуре и наиболее обширной по количеству сохранившихся памятников частью художественного наследия В. и. Хронология развития визант. искусства не вполне совпадает с хронологией… …   Православная энциклопедия

  • АМЕРИКАНСКАЯ АНТРОПОЛОГИЧЕСКАЯ ШКОЛА —         одна из ведущих нац. школ, в широком смысле амер. антропол. традиция. В рамках А.а.ш. сформировался ряд направлений, опирающихся на собственную методологию и методику исследования, отчетливо образующих самостоят, школы: историческую (Боас …   Энциклопедия культурологии

  • НАУЧНЫЙ МАТЕРИАЛИЗМ — направление в англоязычной аналитической философии втор. пол. 20 в., пытающееся решить психофизическую проблему на основе интерсубъективного языка. Его фил ос. предтечами являются: необихевиоризм Б. Скиннера, логический бихевиоризм Г. Райла,… …   Философская энциклопедия

  • Нейрокомпьютер — Фрэнк Розенблатт и «Марк 1» слева Нейрокомпьютер  устройство переработки информации на основе принципов работы естественных нейронных систем …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»