Потоки
869.50K
Категория: ИнформатикаИнформатика

Лекция 9 Потоки

1. Потоки

2.

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

3.

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

4.

Таблица 2–Общие и индивидуальные
элементы потоков
Элементы процесса
Элементы потока
Адресное пространство Глобальные
Счетчик команд Регистры
переменные
Стек Состояние
Открытые файлы Дочерние процессы
Необработанные аварийные сигналы
Сигналы и их обработчики
Информация об использовании
ресурсов

5.

В первом столбце таблицы представлены элементы
процесса, являющиеся общими для всех его потоков.
Например, если один поток открывает файл, то он
становится доступным для всех остальных.
Также как и процесс, поток может находиться в одном из
нескольких состояний. Переходы между состояниями
процессов такие же, как у потоков.
Схема возможных состояний потока

6.

При этом у каждого потока есть индивидуальные
элементы, например, свой собственный стек,
выделенный в адресном пространстве процесса.
Стек (англ. stack – стопка) – структура данных с
методом доступа к элементам LIFO (англ. Last In –
First Out, «последним пришел – первым вышел»)
Каждый поток характеризуется аппаратным контекстом,
в упрощенном виде представляющим собой копию
регистров процессора.
Это связано с реализацией многозадочности: процессор
фактически переключается не между процессами, а
потоками, которые могут принадлежать разным
процессам.

7.

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

8.

КОД (Code)
Этот блок содержит исполняемый машинный код программы — инструкции,
которые процессор выполняет.
Важно, что код обычно общий для всех потоков одного процесса, поэтому он
не дублируется.
Общие данные (Shared Data)
Здесь располагаются данные, доступные всем потокам внутри процесса —
глобальные переменные, статические данные и другие общие ресурсы.
Все потоки могут читать и изменять эти данные, поэтому доступ к ним должен
контролироваться (синхронизация).
КУЧА (Heap)
Область динамической памяти, используемая для выделения памяти во время
выполнения программы. Куча общая для всех потоков процесса, что позволяет
им обмениваться динамически выделенной памятью.
СТЕК 1, СТЕК 2, СТЕК 3 (Stack 1, 2, 3)
Каждый поток имеет свой собственный стек — область памяти для хранения
локальных переменных, адресов возврата из функций, параметров вызова и
т.п.
В отличие от кода, данных и кучи, стеки не общие, а индивидуальные для
каждого потока.
Это обеспечивает изоляцию контекста выполнения

9.

В качестве примера использования нескольких
потоков в одном процессе, можно привести
ситуацию, когда приложению нужно записать
большой файл на диск. При использовании
одного потока доступ к другим функциям
программы будет недоступен до окончания
операции записи в файл.
Другой пример – текстовый редактор, где один
поток отвечает за ввод и отображение текста, а
другой – за проверку орфографии. Также
многопоточные приложения используются для
снижения времени решения задачи, например,
архиватор 7zip для сжатия файлов.

10.

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

11.

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

12.

Существует два основных способа реализации пакета
потоков: в пространстве пользователя и средствами ОС
на уровне ядра.
В первом случае, поток, реализованный ядром ОС,
разбивается на подпотоки средствами пользовательской
программы. При этом операционная система ничего не
знает о пользовательских потоках и управляет обычным
однопоточным процессом. Достоинством данного подхода
является то, что его можно реализовать даже в ОС, не
поддерживающих многопоточность.
Также обеспечивается более высокая производительность
по отношению ко второму способу, так как создание потоков
на уровне ядра требует больше ресурсов. При этом
присутствует возможность использовать собственный
алгоритм планирования работы потоков.

13.

Пакет потоков в пространстве пользователя (а); пакет
потоков, управляемый ядром (б)

14.

Основным недостатком данного способа является то,
что операционная система не видит потоков
пользовательского уровня и предоставляет им время
процессора как одному потоку.
Также при блокировке потока ядра будут
заблокированы и пользовательские.
В большинстве известных операционных системах
потоки реализуются в ядре или применяется
гибридная схема.
English     Русский Правила