Thread

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

Многопото́чность — свойство платформы (например, операционной системы, 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.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Thread" в других словарях:

  • Thread — (thr[e^]d), n. [OE. threed, [thorn]red, AS. [thorn]r[=ae]d; akin to D. draad, G. draht wire, thread, OHG. dr[=a]t, Icel. [thorn]r[=a][eth]r a thread, Sw. tr[*a]d, Dan. traad, and AS. [thorn]r[=a]wan to twist. See {Throw}, and cf. {Third}.] 1. A… …   The Collaborative International Dictionary of English

  • thread — thread; thread·bare·ness; thread·dle; thread·ed; thread·en; thread·er; thread·i·ness; thread·less; thread·let; un·thread; …   English syllables

  • thread — [thred] n. [ME threde < OE thræd (akin to Ger draht) < base of thrawan, to twist: see THROW] 1. a) a light, fine, stringlike length of material made up of two or more fibers or strands of spun cotton, flax, silk, etc. twisted together and… …   English World dictionary

  • Thread — Thread, v. t. [imp. & p. p. {Threaded}; p. pr. & vb. n. {Threading}.] 1. To pass a thread through the eye of; as, to thread a needle. [1913 Webster] 2. To pass or pierce through as a narrow way; also, to effect or make, as one s way, through or… …   The Collaborative International Dictionary of English

  • thread|y — «THREHD ee», adjective, thread|i|er, thread|i|est. 1. consisting of or resembling a thread; threadlike. 2. a) composed of fine fibers; …   Useful english dictionary

  • thread — ► NOUN 1) a long, thin strand of cotton, nylon, or other fibres used in sewing or weaving. 2) a long thin line or piece of something. 3) (also screw thread) a spiral ridge on the outside of a screw, bolt, etc. or on the inside of a cylindrical… …   English terms dictionary

  • thread — (n.) O.E. þræd fine cord, especially when twisted (related to þrawan to twist ), from P.Gmc. *thrædus (Cf. M.Du. draet, Du. draad, O.H.G. drat, Ger. Draht, O.N. þraðr), from suffixed form of root *thræ twist (see THROW (Cf …   Etymology dictionary

  • Thread — [θrɛd] der; s, s <aus gleichbed. engl. thread, eigtl. »Faden«> Folge von Nachrichten zu einem Thema in einer ↑Newsgroup (EDV) …   Das große Fremdwörterbuch

  • thread — thread. См. нить. (Источник: «Англо русский толковый словарь генетических терминов». Арефьев В.А., Лисовенко Л.А., Москва: Изд во ВНИРО, 1995 г.) …   Молекулярная биология и генетика. Толковый словарь.

  • Thread — (spr. thredd, »Faden«), die engl. Haspellänge: bei Baumwollengarn (auch bout) und der in Deutschland üblichen Weise (middle reel) für Kammgarn = 1,5 Yards, bei der meist gebräuchlichen kurzen Weise (short reel) für Kammgarn = 1 Yard oder 91,44 cm …   Meyers Großes Konversations-Lexikon

  • Thread — (spr. thredd), die engl. Haspellänge, bei Baumwollgarn zu 11/2 Yards = 137,16 cm, bei Wollgarn zu 1 Yard = 91,144 cm, bei Leinen und Hanfgarn zu 21/2 Yards = 228,597 cm, bei gezwirnter Seide zu 1 1/3 Yards = 121,92 cm …   Kleines Konversations-Lexikon


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

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