Поток (вычисления)


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

Потоки впервые появились под названием «задачи» в OS / 360 Multiprogramming with a Variable Number of Tasks (MVT) в 1967 году. Зальццер (1966) приписывает Виктору А. Высоцкому термин «поток». [2]

Популярность многопоточности увеличилась примерно в 2003 году, поскольку рост частоты ЦП был заменен ростом количества ядер, что, в свою очередь, требовало одновременного использования нескольких ядер. [3]

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

На уровне ядра процесс содержит один или несколько потоков ядра , которые совместно используют ресурсы процесса, такие как память и дескрипторы файлов. Процесс — это единица ресурсов, а поток — единица планирования и выполнения. Планирование ядра обычно выполняется упреждающе или, реже, совместно. На уровне пользователя такой процесс, как исполняющая система, может сам планировать несколько потоков выполнения. Если они не совместно используют данные, как в Erlang, их обычно аналогично называют процессами [4] , а если они совместно используют данные, их обычно называют (пользовательскими) потоками , особенно если они запланированы с упреждением. Совместно запланированные пользовательские потоки известны как волокна.; разные процессы могут планировать пользовательские потоки по-разному. Пользовательские потоки могут выполняться потоками ядра различными способами (один к одному, многие к одному, многие ко многим). Термин « облегченный процесс » по-разному относится к пользовательским потокам или к механизмам ядра для планирования пользовательских потоков в потоках ядра.

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


Процесс с двумя потоками выполнения, работающий на одном процессоре