Посещение сайта
Благодарность: Школа StartUp.
)

ПОТОКИ (нити)

ПОТОКИ (нити)

Потоки  в операционных системах нужны для двух вещей – для параллелизма и одновременности.

Параллелизмэто физически одновременное выполнение для достижения наибольшей производительности(например, между двумя ядрами).

Одновременностьлогическое и/или физическое одновременное выполнение (есть один ЦП, на нем одновременно выполняется несколько программ – многозадачная ОС).

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

Потоки – другой способ достичь параллелизма. Потоки работают внутри одного процесса. Все потоки процесса имеют одно адресное пространство и те же ресурсы ОС. У потоков есть свой стек и свое состояние ЦП.

Параллелизм (примеры)

Примеры:

Веб-сервер, который для каждого пользовательского процесса создает новый процесс, т.е. должен обслуживать несколько запросов параллельно.

Ожидая данных по запросу клиента из БД сервер в это же время мог бы загрузить данные с диска для другого клиента и обработать запрос третьего клиента.

Веб-браузер – в момент обращения к веб- странице, он мог бы параллельно загружать данные из различных источников.

Некоторая вычислительная программа использующая физический параллелизм – например, когда нужно обработать большой массив данных.

В каждом из этих примеров параллелизма есть общее:

  • Один код
  • Доступ к одним данным
  • Один уровень доступа
  • Одно множество ресурсов.

разное:

  • Стэк и указатель стэка (регистр SP)
  • Счетчик инструкций (регистр IP), указывающий на следующую инструкцию
  • Множество регистров ЦП

Процессы и потоки

Большинство современных ОС поддерживает два объекта:

  1. Процесс, который определяет адресное пространство и общие атрибуты процесса.
  2. Поток, который определяет последовательный поток выполнения в рамках процесса.

Поток привязывается к одному процессу и одному адресному пространству.

  • Но может быть много потоков в одном адресном пространстве
  • Обеспечивают легкий доступ к общим данным
  • Создание потоков занимает очень мало времени

ПОТОКИ стали единицей планирования

Процессывсего лишь контейнер, в котором выполняются потоки.

Процесс – это непосредственно контейнер, а поток – это нити выполнения, которые у него есть внутри.

Многопоточность

Многопоточность полезна для :

  •  обработки одновременных событий
  •  построение параллельных программ.

Поддержка многопоточности – разделение понятие процесса от минимального потока управления.

  • Для параллельного потока выполнения не нужно создавать новые процессы.
  • Работает быстрее, меньше требования к памяти.

Раньше: «Процесс»= адресное пространство + ресурсы ОС+ подразумевался единственный поток

Раньше: «Процесс»= адресное пространство + ресурсы ОС+ все потоки принадлежат процессу

Какие бывают потоки?

Виды потоков 

Потоки делают двумя способами:

1)На уровне ядра —  есть функции ядра для создания нового потока.
— выделяется стек выполнения на внутри адресного пространства процесса;
— создает и инициализирует Thread Control Block (блок упр.процессом).

Потоки (нити)

Потоки ядра

2)На уровне пользователя

Потоки (нити)

потоки уровня пользователя

На рисунке три потока. Есть специальная библиотека Pthreads, которая управляет потоками вне ядра самостоятельно.

В обеих вариантах есть плюсы и минусы

Первый вариант минус —  нужен системный вызов при создании потока, а это время процессора. На уровне пользователя системного вызова не нужно, все управляется специальной библиотекой.

Библиотека Pthreads (положительное):

Каждый поток представляется регистрами ЦП, стеком и небольшим блоком TCB

Создание потока, переключение между потоками и синхронизация потоков выполняется без участия ядра

Потоки уровня пользователя могут быть в 10-100 раз быстрее, чем потоки режима ядра

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

Поэтому пользовательские потоки не обрели большой популярности.

Возможно решить эти проблемы на уровне планировщика.

В ОС Windows NT потоки реализованы на уровне ядра, что позволяет более тонко регулировать события.

Ввели fiber – вытесняющую многозадачность.

Отличие потоков от процессов

Потоки выполнения отличаются от традиционных процессов  многозадачной операционной системы тем, что:

  • процессы, как правило, независимы, тогда как потоки выполнения существуют как составные элементы процессов;
  • процессы несут значительно больше информации о состоянии, тогда как несколько потоков выполнения внутри процесса совместно используют информацию о состоянии, а также память и другие вычислительные ресурсы;
  • процессы имеют отдельные адресные пространства, тогда как потоки выполнения совместно используют их адресное пространство;
  • процессы взаимодействуют только через предоставляемые системой механизмы связей между процессами;
  • переключение контекста между потоками выполнения в одном процессе, как правило, быстрее, чем переключение контекста между процессами.

Такие системы, как Windows NT и OS/2, как говорят, имеют «дешёвые» потоки выполнения и «дорогие» процессы. В других операционных системах разница между потоками выполнения и процессами не так велика, за исключением расходов на переключение адресного пространства.

Следующая важная тема в теории операционных систем «Синхронизация».

 

Скачать презентацию к лекции «Процессы и потоки»

 

Скачать тест по теме «Процессы и потоки»

 

 

Понравилась статья, рекомендуйте Вашим друзьям!

Давайте дружить!

1 комментарий к записи “ПОТОКИ (нити)”

  • oocyte:

    Начало хорошее! Добавил в закладки — прочитаю чуть попозже.

Оставить комментарий