Похожие презентации:
10. Применение потоков. Классификация потоков. Реализация потоков
1. Применение потоков. Классификация потоков. Реализация потоков
2. Потоки
В многозадачных операционных системах эффективное использованиересурсов процессора, а также параллельная обработка задач становятся
ключевыми задачами.
Потоки — это важный механизм для решения этих задач. Они позволяют
разделить процесс на несколько параллельно выполняющихся частей, что
значительно улучшает производительность и откликаемость системы. В этой
лекции мы рассмотрим основные аспекты потоков, их классификацию и
методы реализации в современных операционных системах.
Поток – последовательность команд, работающих в рамках выполнения
процесса.
Каждый поток состоит из трех основных элементов:
• стек — представляет собой способ хранения данных с упорядоченными
элементами, где удаление и добавление элементов выполняется по принципу
«последним пришел, первым ушел»;
• регистр процессора — определенный участок памяти внутри процессора,
предназначенный для промежуточного хранения информации и имеющий
длину от 8 до 32 бит;
• счетчик команд — регистр процессора, который определяет
последовательность выполнения команд.
3. Потоки
Каждый поток может находиться в одном из трех состояний: выполнение,готовность к выполнению назначенных инструкций, ожидание.
Для управления потоком операционная система использует объект ядра, где
хранится вся необходимая статистическая информация. Параметры всех
локальных переменных и функций, которые нужны потоку, чтобы выполнить
код, содержатся в стеке.
Несмотря на то что поток выполняется внутри процесса, концепции у этих двух
явлений разные. Процесс предназначен для группировки родственных ресурсов.
Поток представляет собой набор объектов, которые выполняются в
определенном порядке. При этом одновременно внутри одной и той же среды
процесса параллельно может исполняться несколько независимых программ. В
этом случае потоки будут совместно использовать, например, открытые файлы и
адресное пространство.
4. Потоки
В зависимости от способа классификации выделяют три типа моделированияпотоков:
• по отображению в ядро;
• по уровню реализации;
• по виду многозадачности.
Модели отображения в ядро
• 1:1. Такая модель считается наиболее простой, используется в Windows и
Linux с ядром от 2.6 и выше. Основной принцип модели 1:1 — за управление
любым потоком внутри любого процесса напрямую отвечает планировщик
ядра.
• N:M. Относится к гибридным системам, обладает высокой
производительностью, но сложна в реализации. Основной принцип модели:
часть пользовательских потоков (N) выполняется за счет команд из
планировщика ОС, потоки режима ядра (M) управляются планировщиком
потоков процесса или библиотекой потоков. Например, это может быть GNU
Portable Threads — библиотека пользовательского пространства на базе
POSIX/ANSI-C для UNIX-платформ.
5. Потоки
• N:1. Все пользовательские потоки управляются планировщиком ядра ОС.Примером такой модели могут служить волокна — облегченные
пользовательские потоки, которые чаще всего применяются для упрощения
портирования софта, разработанного для другой ОС.
Модели потоков в зависимости от уровня реализации
• Поддержка потоков в режиме пользователя.
Модель поддержки потоков в режиме пользователя (User-level threads, ULT) в
операционных системах — это подход, при котором управление потоками
осуществляется библиотекой потоков в пользовательском пространстве без
вмешательства ядра операционной системы. Такие потоки также известны как
зелёные потоки или легковесные потоки.
-- Создаются, планируются и управляются библиотекой потоков в
пользовательском пространстве.
-- ОС не знает о существовании отдельных потоков — ядро видит только один
поток (процесс).
-- Все переключения между потоками выполняются в пользовательском
пространстве, без переключения в режим ядра.
6. Потоки
• Поддержка потоков на уровне ядра. В эту группу входят все модели потоков,относящиеся к формату 1:1. Например, Native Posix Threads Library (NPTL),
Win 32, Leight Weight Kernel Threads (LWKT) в DragonFlyBSD.
Модель поддержки потоков на уровне ядра в операционной системе
предполагает, что операционная система напрямую поддерживает потоки как
часть ядра. Каждый поток — отдельный объект, который может планироваться и
выполняться системой независимо.
-- Модель 1:1 — каждый созданный пользователем поток соответствует одному
потоку ядра.
-- Модель много/один (many-to-one) — отображение нескольких
пользовательских потоков в один и тот же поток ядра. Используется в
операционных системах, не поддерживающих множественные системные
потоки (например, для экономии памяти).
-- Модель много/много (many-to-many) — отображение нескольких
пользовательских потоков в несколько системных потоков. Позволяет ОС
создавать большое число системных потоков.
7. Потоки
• Гибридный режим.В таких моделях разработчики пытаются создать тандем из одновременной
поддержки потоков в режиме пользователя и на уровне ядра.
Модель поддержки потоков гибридного типа (M:N) (смешанная потоковость) —
компромисс между моделью уровня ядра (1:1) и моделью уровня пользователя
(N:1). В этой модели некоторое число M прикладных потоков выполнения
отображаются на некоторое число N сущностей ядра или «виртуальных
процессоров»
Библиотека потоков отвечает за планирование пользовательских потоков на
имеющихся планируемых сущностях. При этом:
-- Переключение контекста потоков происходит быстро, поскольку модель
позволяет избежать системных вызовов.
-- Политика планирования может быть адаптирована к требованиям конкретной
программы, так как планирование происходит в пользовательском
пространстве.
8. Потоки и многопоточность
Многопоточностью называют свойство ОС, платформы или приложениявыполнять параллельно несколько потоков в составе одного общего процесса.
Такое решение позволяет повысить эффективность использования
вычислительной техники. Однако при его реализации разработчики часто
сталкиваются с различными проблемами синхронизации.
• Состояние гонки — так называют ошибку проектирования, в результате
которой итоговое решение зависит от порядка реализации отдельных частей
кода.
• Взаимная блокировка — возникает в ситуации, когда параллельные потоки
ожидают ресурсы, которые уже заняты «конкурентами», в результате чего ни
один из них не может продолжить работу.
• Голодание потоков — отсутствие доступа потока к какому-либо общему
ресурсу, так как он непрерывно занят другими потоками, имеющими
первоочередную важность.
• Livelock или живой замок — явление, при котором потоки непрерывно
реагируют на действия друг друга, из-за чего у них не остается возможности
возобновить работу.
9. Потоки и многопоточность
Потоки и процессы используются при программировании различныхприложений и серверов, упрощая и ускоряя обработку информации.
Например, разработчику нужно организовать работу веб-сервера. Для этого он
будет манипулировать потоком диспетчера и рабочими потоками. Диспетчер
считывает входящие из сети запросы, анализирует их и передает на выполнение
свободному рабочему потоку.
Этот рабочий поток переходит в состояние готовности, проверяет доступность
запрашиваемых данных из кеша доступных ему веб-страниц. При отсутствии
информации запускается процесс чтения с диска, а поток блокируется до тех
пор, пока не будет завершена дисковая операция. При блокировке рабочего
потока активируется другой поток в стадии готовности или диспетчер.
Благодаря такому решению упрощается программирование, и возрастает
производительность всей системы.
10. Применение потоков
Потоки — это основные единицы выполнения внутри процесса. Каждыйпоток имеет собственный поток исполнения (память, стек и регистры), но все
потоки одного процесса разделяют общие ресурсы, такие как память и
файловые дескрипторы. Потоки используются для параллельной обработки
задач, улучшения отклика приложения и эффективного использования
многоядерных процессоров.
Основные области применения потоков:
• Многозадачность:
Потоки позволяют приложению выполнять несколько операций одновременно.
Например, поток может выполнять расчетные операции, в то время как другой
поток отвечает за пользовательский интерфейс.
• Улучшение отклика:
Потоки помогают приложению оставаться отзывчивым, несмотря на
выполнение длительных операций. Например, в графических приложениях
один поток может рисовать интерфейс, а другой — загружать данные.
11. Применение потоков
• Использование многоядерных процессоров:Современные процессоры имеют несколько ядер, и многопоточность позволяет
эффективно использовать все ядра. Например, каждый поток может
выполняться на отдельном ядре, что значительно ускоряет выполнение
параллельных задач.
• Сетевые и серверные приложения:
В серверных приложениях потоки широко используются для обработки
множества запросов одновременно. Например, веб-сервер может использовать
один поток для обработки каждого входящего запроса.
• Асинхронные вычисления:
Потоки полезны в ситуациях, когда программа выполняет асинхронные
операции, такие как запросы к базам данных или файловым системам. Потоки
позволяют не блокировать основное выполнение программы, ожидая
завершения этих операций.
12. Классификация потоков
Существует несколько типов потоков, которые можно классифицировать поразличным признакам:
• По отношению к процессу
1. Потоки внутри процесса:
Потоки одного процесса разделяют общую память и ресурсы. Эти потоки могут
взаимодействовать друг с другом через общую память и обмен сообщениями.
2. Потоки между процессами:
это потоки, которые принадлежат различным процессам. Они могут
взаимодействовать друг с другом через механизмы межпроцессного
взаимодействия (IPC), такие как очереди сообщений, общая память и т. д.
13. Классификация потоков
• По типу исполнения1. Пользовательские потоки (user threads):
Эти потоки создаются и управляются приложением или библиотеками
пользователя. Операционная система не управляет ими напрямую, но
предоставляет механизмы для их создания и синхронизации.
2. Ядровые потоки (kernel threads):
Эти потоки управляются ядром операционной системы. Каждый ядровой поток
может быть выполнен на отдельном процессорном ядре и может использовать
всю мощность многозадачной операционной системы.
• По способу создания
1. Прямые потоки:
Потоки создаются явно в программе с помощью системных вызовов или API,
например, с использованием библиотек pthread (POSIX) или Java Thread API.
2. Непрямые потоки:
Эти потоки создаются операционной системой для выполнения системных
задач (например, поток, обслуживающий запросы ввода-вывода или системные
прерывания).
14. Классификация потоков
• По способу управления1. Ручное управление потоками:
Программист сам управляет созданием, синхронизацией и завершением
потоков.
2. Автоматическое управление потоками:
Операционная система или среда выполнения управляет потоками. Например, в
таких языках, как Java, потоки могут быть созданы автоматически, и
планирование их выполнения управляется системой.
15. Реализация потоков
Реализация потоков зависит от операционной системы, языкапрограммирования и среды выполнения.
Рассмотрим два основных подхода к реализации потоков: пользовательские
потоки и ядровые потоки.
1. Пользовательские потоки.
Пользовательские потоки реализуются полностью на уровне приложения, без
участия операционной системы. Это означает, что планирование и управление
потоками происходит в пользовательском пространстве, а не в ядре
операционной системы.
• Преимущества:
− Быстрое создание и уничтожение потоков, так как не требуется
взаимодействие с ядром.
− Меньшие накладные расходы на управление потоками.
• Недостатки:
− Пользовательские потоки не могут эффективно использовать многозадачность
на многопроцессорных системах, поскольку операционная система видит
только один поток для каждого процесса.
− Проблемы с блокировкой потока: если один поток в процессе блокируется
(например, из-за операции ввода/вывода), все потоки этого процесса также
блокируются.
16. Реализация потоков
2.Ядровые потоки
Ядровые потоки управляются операционной системой. Каждый ядровой
поток может быть выполнен на отдельном процессорном ядре, и планирование
их выполнения контролируется операционной системой.
• Преимущества:
− Полная поддержка многозадачности, эффективное использование
многозадачности на многоядерных процессорах.
− Возможность выполнения асинхронных операций без блокировки
других потоков.
• Недостатки:
− Создание и уничтожение потоков требует обращения к ядру
операционной системы, что увеличивает накладные расходы.
− Планирование потоков осуществляется ядром, что может быть
менее гибким, чем в случае пользовательских потоков.
17. Реализация потоков
3.Гибридная модель потоков
Гибридная модель использует и пользовательские, и ядровые потоки. В такой
модели потоки в приложении могут быть распределены между несколькими
ядровыми потоками, что позволяет эффективно использовать многозадачность и
минимизировать накладные расходы. Например, одна группа пользовательских
потоков может быть связана с одним ядровым потоком, и ядровой поток будет
управлять всеми пользовательскими потоками.
18.
ЗаданияОтветьте на вопросы:
1) Что такое потоки?
2) Перечислите основные элементы потоков;
3) В каких состояниях могут быть потоки?
4) Перечислите типы моделирования потоков;
5) Что такое многопоточность?
6) Какие ошибки могут возникнуть в режиме многопоточности?
7) Перечислите и опишите основные области применения потоков;
19.
ЗаданияПрактические задания:
1) Создание простого потока
Цель: создать простейший поток и вывести сообщение из него.
Этапы выполнения:
1.
2.
3.
Написать основную функцию, создающую поток.
Определить целевую функцию потока, которая выводит строку.
Запустить поток и дождаться завершения работы.
20.
ЗаданияПрактические задания:
2) Синхронизация потоков с использованием мьютекса
Цель: предотвратить доступ двух потоков к общему ресурсу одновременно.
Этапы выполнения:
1. Инициализировать мьютекс.
2. Два потока будут пытаться обновить общий ресурс, защищенный
мьютексом.
3. Проверить, что обновление прошло успешно и данные не повреждены.
21.
ЗаданияПрактические задания:
3) Использование условных переменных
Цель: организовать ожидание сигнала в одном потоке и сигнализацию другому
потоку.
Этапы выполнения:
1. Один поток ожидает сигнал от
другого потока.
1. Второй поток отправляет сигнал,
разрешая первому продолжить работу..
22.
ЗаданияПрактические задания:
4) Демон-воркер поток
Цель: создание демона-функции, работающей фоном и завершающейся
автоматически при выходе из программы.
Этапы выполнения:
1. Настройка демонического поведения для потока.
2. Основной поток завершит работу раньше воркер-потока.
23.
ЗаданияПрактические задания:
5) Передача сообщений между потоками
Описание: Организовать обмен сообщениями между двумя потоками через
очередь.
Этапы выполнения:
1. Создайте очередь для передачи сообщений.
2. Один поток отправляет сообщение, второй принимает.
3. Продемонстрируйте получение сообщения вторым потоком.
Программирование