Поток

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

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

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

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

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

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

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

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

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

Достоинства

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

Недостатки

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

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

 Эта статья находится под лицензией GNU Free Documentation License. Она использует материалы из Википедеи.