ПОТОКИ (нити)
ПОТОКИ (нити)
Потоки в операционных системах нужны для двух вещей – для параллелизма и одновременности.
Параллелизм – это физически одновременное выполнение для достижения наибольшей производительности(например, между двумя ядрами).
Одновременность – логическое и/или физическое одновременное выполнение (есть один ЦП, на нем одновременно выполняется несколько программ – многозадачная ОС).
Потоки нужны для того и другого понятия для эффективного использования. В самом простом варианте, чтобы достичь параллелизма – использование множества процессов – программы изолированы друг от друга в разных процессах, поэтому параллелизм есть.
Потоки – другой способ достичь параллелизма. Потоки работают внутри одного процесса. Все потоки процесса имеют одно адресное пространство и те же ресурсы ОС. У потоков есть свой стек и свое состояние ЦП.
Параллелизм (примеры)
Примеры:
Веб-сервер, который для каждого пользовательского процесса создает новый процесс, т.е. должен обслуживать несколько запросов параллельно.
Ожидая данных по запросу клиента из БД сервер в это же время мог бы загрузить данные с диска для другого клиента и обработать запрос третьего клиента.
Веб-браузер – в момент обращения к веб- странице, он мог бы параллельно загружать данные из различных источников.
Некоторая вычислительная программа использующая физический параллелизм – например, когда нужно обработать большой массив данных.
В каждом из этих примеров параллелизма есть общее:
- Один код
- Доступ к одним данным
- Один уровень доступа
- Одно множество ресурсов.
разное:
- Стэк и указатель стэка (регистр SP)
- Счетчик инструкций (регистр IP), указывающий на следующую инструкцию
- Множество регистров ЦП
Процессы и потоки
Большинство современных ОС поддерживает два объекта:
- Процесс, который определяет адресное пространство и общие атрибуты процесса.
- Поток, который определяет последовательный поток выполнения в рамках процесса.
Поток привязывается к одному процессу и одному адресному пространству.
- Но может быть много потоков в одном адресном пространстве
- Обеспечивают легкий доступ к общим данным
- Создание потоков занимает очень мало времени
ПОТОКИ стали единицей планирования
Процессы – всего лишь контейнер, в котором выполняются потоки.
Процесс – это непосредственно контейнер, а поток – это нити выполнения, которые у него есть внутри.
Многопоточность
Многопоточность полезна для :
- обработки одновременных событий
- построение параллельных программ.
Поддержка многопоточности – разделение понятие процесса от минимального потока управления.
- Для параллельного потока выполнения не нужно создавать новые процессы.
- Работает быстрее, меньше требования к памяти.
Раньше: «Процесс»= адресное пространство + ресурсы ОС+ подразумевался единственный поток
Раньше: «Процесс»= адресное пространство + ресурсы ОС+ все потоки принадлежат процессу
Какие бывают потоки?
Виды потоков
Потоки делают двумя способами:
1)На уровне ядра — есть функции ядра для создания нового потока.
— выделяется стек выполнения на внутри адресного пространства процесса;
— создает и инициализирует Thread Control Block (блок упр.процессом).
2)На уровне пользователя
На рисунке три потока. Есть специальная библиотека Pthreads, которая управляет потоками вне ядра самостоятельно.
В обеих вариантах есть плюсы и минусы
Первый вариант минус — нужен системный вызов при создании потока, а это время процессора. На уровне пользователя системного вызова не нужно, все управляется специальной библиотекой.
Библиотека Pthreads (положительное):
Каждый поток представляется регистрами ЦП, стеком и небольшим блоком TCB
Создание потока, переключение между потоками и синхронизация потоков выполняется без участия ядра
Потоки уровня пользователя могут быть в 10-100 раз быстрее, чем потоки режима ядра
- Множество потоков в одном адресном пространстве это хорошо;
- Потоки режима ядра намного эффективнее процессов, но есть потери на системные вызовы;
- Потоки режима пользователя имеют преимущества и недостатки:
— высокая скорость и «дешевизна» создания;
— могут быть проблемы с вводом/выводом и блокировками, из-за того, что ядро не знает об этих потоках.
Поэтому пользовательские потоки не обрели большой популярности.
Возможно решить эти проблемы на уровне планировщика.
В ОС Windows NT потоки реализованы на уровне ядра, что позволяет более тонко регулировать события.
Ввели fiber – вытесняющую многозадачность.
Отличие потоков от процессов
Потоки выполнения отличаются от традиционных процессов многозадачной операционной системы тем, что:
- процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов;
- процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы;
- процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство;
- процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами;
- переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами.
Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства.
Следующая важная тема в теории операционных систем «Синхронизация».
Скачать презентацию к лекции «Процессы и потоки»
Скачать тест по теме «Процессы и потоки»
Начало хорошее! Добавил в закладки — прочитаю чуть попозже.