Потоки, потоки и еще раз потоки


Слово поток, или нить (thread), встречается в разных контекстах. Некоторые процессоры поддерживают технологию HyperThreading. Некоторые процессы запускают несколько потоков исполнения (нитей). Операционная система FreeBSD содержит три отдельные библиотеки, позволяющие реализовать многопоточную модель исполнения. Некоторые части ядра работают как отдельные потоки исполнения (нити). Мои штаны состоят из огромного множества нитей (хотя в некоторых предметах одежды этих нитей так мало, что в них, по мнению моей жены, неприлично появляться на публике).* Что же это за потоки и что подразумевается под этим словом?

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

Любая многопоточная программа использует библиотеку реализации многопоточной модели исполнения (threading library), позволяющую приложению использовать потоки в данной операционной системе, взаимодействуя с ядром. Библиотеки реализуют многопоточную модель разными способами, поэтому применение конкретных библиотек может влиять на производительность приложения.

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

HyperThreading — это маркетинговый термин, не имеющий никакого отношения к потокам исполнения в системе. Хотя вам необходимо понимать, что такое HyperThreading и какое влияние эта технология оказывает на систему (об этом рассказывалось в предыдущем разделе), тем не менее она не является частью многопоточной модели исполнения.

Комментарии запрещены.