Similar presentations:
Лекция 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.
Основным недостатком данного способа является то,что операционная система не видит потоков
пользовательского уровня и предоставляет им время
процессора как одному потоку.
Также при блокировке потока ядра будут
заблокированы и пользовательские.
В большинстве известных операционных системах
потоки реализуются в ядре или применяется
гибридная схема.
informatics