7. Многозадачность и многопоточность.
Многозадачность (англ. multitasking) — свойство операционной системы или среды выполнения обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких задач. Истинная многозадачность операционной системы возможна только в распределённых вычислительных системах.
Существует 2 типа многозадачности:
- Процессная многозадачность (основанная на процессах — одновременно выполняющихся программах). Здесь программа — наименьший элемент управляемого кода, которым может управлять планировщик операционной системы. Более известна большинству пользователей (работа в текстовом редакторе и прослушивание музыки).
- Поточная многозадачность (основанная на потоках). Наименьший элемент управляемого кода — поток (одна программа может выполнять 2 и более задачи одновременно).
Многопоточность — специализированная форма многозадачности.
Свойства многозадачной среды Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени.
Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда обладает следующими особенностями:
- Каждая задача имеет свой приоритет, в соответствии с которым получает процессорное время и память
- Система организует очереди задач так, чтобы все задачи получили ресурсы, в зависимости от приоритетов и стратегии системы
- Система организует обработку прерываний, по которым задачи могут активироваться, деактивироваться и удаляться
- По окончании положенного кванта времени ядро временно переводит задачу из состояния выполнения в состояние готовности, отдавая ресурсы другим задачам. При нехватке памяти страницы невыполняющихся задач могут быть вытеснены на диск (своппинг), а потом, через определённое системой время, восстанавливаться в памяти
- Система обеспечивает защиту адресного пространства задачи от несанкционированного вмешательства других задач
- Система обеспечивает защиту адресного пространства своего ядра от несанкционированного вмешательства задач
- Система распознаёт сбои и зависания отдельных задач и прекращает их
- Система решает конфликты доступа к ресурсам и устройствам, не допуская тупиковых ситуаций общего зависания от ожидания заблокированных ресурсов
- Система гарантирует каждой задаче, что рано или поздно она будет активирована
- Система обрабатывает запросы реального времени
- Система обеспечивает коммуникацию между процессами
Типы псевдопараллельной многозадачности
Простое переключение
Тип многозадачности, при котором операционная система одновременно загружает в память два или более приложений, но процессорное время предоставляется только основному приложению.
Преимущества: можно задействовать уже работающие программы, написанные без учёта многозадачности.
Недостатки: невозможно в неинтерактивных системах, работающих без участия человека. Взаимодействие между программами крайне ограничено.
Совместная или кооперативная многозадачность
Тип многозадачности, при котором следующая задача выполняется только после того, как текущая задача явно объявит себя готовой отдать процессорное время другим задачам.
Преимущества кооперативной многозадачности: отсутствие необходимости защищать все разделяемые структуры данных объектами типа критических секций и мьютексов, что упрощает программирование, особенно перенос кода из однозадачных сред в многозадачные.
Недостатки: неспособность всех приложений работать в случае ошибки в одном из них, приводящей к отсутствию вызова операции «отдать процессорное время». Крайне затрудненная возможность реализации многозадачной архитектуры ввода-вывода в ядре ОС, позволяющей процессору исполнять одну задачу в то время, как другая задача инициировала операцию ввода-вывода и ждет её завершения.
Вытесняющая, или приоритетная, многозадачность (режим реального времени)
Вид многозадачности, в котором операционная система сама передает управление от одной выполняемой программы другой в случае завершения операций ввода-вывода, возникновения событий в аппаратуре компьютера, истечения таймеров и квантов времени, или же поступлений тех или иных сигналов от одной программы к другой. В этом виде многозадачности процессор может быть переключен с исполнения одной программы на исполнение другой без всякого пожелания первой программы и буквально между любыми двумя инструкциями в её коде. Распределение процессорного времени осуществляется планировщиком процессов. К тому же каждой задаче может быть назначен пользователем или самой операционной системой определенный приоритет, что обеспечивает гибкое управление распределением процессорного времени между задачами (например, можно снизить приоритет ресурсоёмкой программе, снизив тем самым скорость её работы, но повысив производительность фоновых процессов). Этот вид многозадачности обеспечивает более быстрый отклик на действия пользователя.
возможность полной реализации многозадачного ввода-вывода в ядре ОС, когда ожидание завершения ввода-вывода одной программой позволяет процессору тем временем исполнять другую программу; cильное повышение надежности системы в целом, в сочетании с использованием защиты памяти — идеал в виде «ни одна программа пользовательского режима не может нарушить работу ОС в целом» становится достижимым хотя бы теоретически, вне вытесняющей многозадачности он не достижим даже в теории. возможность полного использования многопроцессорных и многоядерных систем.
необходимость особой дисциплины при написании кода, особые требования к его реентерабельности, к защите всех разделяемых и глобальных данных объектами типа критических секций и мьютексов.
Конспектики
- by kvckr
- kvckrr@gmail.com
5. МНОГОЗАДАЧНОСТЬ И МНОГОПОТОЧНОСТЬ
5.1. Цель работы Ознакомление с концепцией многозадачности и многопоточности современных операционных систем, получение практических навыков по составлению, написанию и отладке программ, содержащих параллельно функционирующие процедуры и функции.
5.2. Указания по подготовке к выполнению лабораторной работы Многозадачность на сегодняшний день – одна из определяющих особенностей операционных систем. При подготовке к лабораторной работе необходимо ознакомится с теоретическим описанием принципа многозадачности и особенностями ее аппаратной реализации. Внимательно проработать вопросы обеспечения многозадачности (multitasking) и многопоточности (multithreading) при- ложений Windows. При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.763-809], [17, c.59-87]. 5.3. Обзор темы работы Многозадачность (multitasking) – это способность операционной системы выполнять несколько программ одновременно. В основе этого принципа лежит использование операционной системой аппаратного таймера для выделения отрезков времени для каждого из одновременно выполняемых процессов. Если эти отрезки времени достаточно малы, и машина не перегружена слишком большим числом программ, то пользователю кажется, что все эти программы выполняются параллельно. Многопоточность – это возможность программы самой быть многозадачной. Программа может быть разделена на отдельные потоки выполнения, которые, как кажется, выполняются параллельно. В лабораторной работе изучаются функции порождения и завершения процесса CreateProcess, ExitProcess, TerminateProcess, создания и завершения потока CreateThread, ExitThread. Особое внимание в лабораторной работе уделяется исследованию возможностей синхронизации процессов и потоков. Существует большой класс задач (например, в управлении базами данных, параллельных вычислениях), в которых параллельно функционирующие программы (или их модули) нуждаются в обмене информации или порядок выполнения одних из программных модулей зависит от выполнения других. Windows предоставляет две специальные возможности синхронизировать параллельно выполняемые задачи – это семафоры и события. Семафор действует как обычных флаг, и используется для того, чтобы определить свободен или нет в настоящее время требующийся потоку или процессу ресурс. Пользователь может определять для семафора количество ресурсов, доступных для использования параллельными задачами. При занятии потоком какого-либо количества свободных ресурсов происходит декрементация количества ресурсов, и если, оставшееся число ресурсов недостаточно следующему потоку, он приостанавливается до момента освобождения необходимого числа ресурсов. Для управления семафорами используются функции CreateSemaphore, ReleaseSemaphore, OpenSemaphore, WaitForSingleObject. События являются самой примитивной разновидностью объектов синхронизации. Они используются для того, чтобы уведомить поток о том, что наступило ожидаемое событие. Эти объекты обычно используются для того, чтобы
синхронизировать потоки, которые работают по принципу конвейера. Например, один поток опрашивает датчики и загружает считанные значения в буфер. Другой поток считывает эти данные из буфера и производит их обработку. Первый поток может сигнализировать второму о том, что событие – заполнение буфера – наступило. Второй поток может сигнализировать первому о том, что наступило другое событие – данные из буфера считаны, ожидается новая порция данных. Событие может иметь два состояния – занятое и свободное. Работа с событиями осуществляется посредством следующих функций: CreateEvent, ResetEvent, PulseEvent, SetEvent. 5.4. Задание на лабораторную работу Вариант 1 Написать программу, порождающую четыре потока, каждому из которых выделяется четвертая часть окна приложения. Первый поток выводит в свою область возрастающую числовую последовательность 0,1,2,…, второй – последовательность чисел Фибоначчи. Третий поток заполняет свой участок окна прямоугольниками случайного размера и цвета, четвертый поток фиксирует в трех переменных и выводит их в своей области окна число запусков каждого из предыдущих трех потоков. Вариант 2 Написать программу, порождающую поток по нажатию одной из клавиш клавиатуры. Каждому созданному таким образом потоку соответствует окружность в окне приложения, которая появляется в случайном месте окна приложения и движется либо во вертикали, либо по горизонтали. При достижении границы окна, окружность меняет направление своего движения на противоположное. Вариант 3 В программе создать два потока. Назначение одного из них – периодиче- ское чтение системного времени и заполнение глобальной структуры (часы, минуты, секунды), второго – вывод данной структуры на экран. При помощи критического раздела организовать раздельный доступ потоков к структуре данных. Вариант 4 Написать программу, содержащую два потока, каждый из которых управ- ляет движением одного из двух шаров. Первый шар двигается горизонтально, второй – вертикально. Скорость шаров различна. При достижении границы клиентской области окна, шар меняет направление движения на противоположное. При помощи объектов синхронизации (семафоров или событий) реализовать алгоритм движения шаров без столкновений. Вариант 5 Написать программу, которая запускает новый поток при нажатии левой клавиши мыши. Поток начинает выводить возрастающую числовую последовательность в текущую позицию курсора мыши. При нажатии левой клавиши мыши программа удаляет поток, координаты которого ближе всего к положению мыши.
Вариант 6 Создать многопоточную программу, формирующую потоки трех типов. Каждый из потоков запускается соответствующим пунктом меню и захватывает соответственно 1,2,3 ресурса (максимальное число ресурсов по умолчанию – 8 и может меняться пользователем в окне диалога, вызываемом через меню). Количество, вид потоков, а также их состояние выводится на экран. Если число ресурсов не позволяет работать потоку, он находится в состоянии ожидания. Удаление потоков осуществляется через меню в порядке запуска (первым удаляется поток, запущенный первым). Вариант 7 Написать программу, которая позволяет запускать процессы, используя для этого выбранные на диске файлы. Пользователь может задавать имя запускаемого файла и командную строку. Программа следит за всеми запущенными ею процессами и выводит по требованию пользователя следующую информацию: имя процесса, значение указателя и идентификатора процесса, время выполнения процесса. Вариант 8 Написать программу, которая читает с диска *.bmp файл и выводит его в окно приложения. При помощи потока организовать поворот изображения на 90 градусов. Операцию можно прервать при помощи диалогового окна, возникающего на время выполнения операции. Вариант 9 Написать программу, которая по нажатию мыши создает потоки: по нажа- тию правой клавиши – поток, производящий вывод возрастающего ряда в позицию курсора, левой – поток с убывающим рядом. Поток выгружается из памяти по окончанию счета. Число потоков ограничивается пользователем через контекстное меню и находится в диапазоне [4,8]. Вариант 10 Написать три программы. Первая из них формирует метофайл, содержа- щий 10 прямоугольников, вторая – открывает созданный метофайл и дорисовывает в него 10 эллипсов. Третья программа – отображает конечный метофайл в клиентской области окна. Все три программы работают циклически, в одно и то же время может работать только одна программа. 5.5. Контрольные вопросы и задания 1. Поясните принцип многозадачности современных операционных систем. 2. Чем отличается многозадачность от многопоточности? 3. Каким образом аппаратно решаются задачи обеспечения многозадачности? 4. В чем заключаются особенности невытесняющей многозадачности? 5. Приведите примеры использования многопоточности в прикладных программах. 6. Каким образом осуществляется синхронизация потоков?
Разница между многозадачностью и многопоточностью в ОС
В этой статье мы обсудим различия между многозадачностью и многопоточностью. Люди обычно путаются между этими терминами. С одной стороны, многозадачность является логическим расширением многозадачности, а с другой стороны, многозадачность является многозадачностью на основе потоков. Основное различие между многозадачностью и многопоточностью заключается в том, что многозадачность позволяет процессору одновременно выполнять несколько задач (программа, процесс, задача, потоки), тогда как многопоточность позволяет одновременно выполнять несколько потоков одного и того же процесса. Давайте обсудим различия между многозадачностью и многопоточностью с помощью сравнительной таблицы, показанной ниже.
Сравнительная таблица
Основа для сравнения | Многозадачность | Многопоточность |
---|---|---|
основной | Многозадачность позволяет процессору выполнять несколько задач одновременно. | Многопоточность позволяет процессору одновременно выполнять несколько потоков процесса. |
Переключение | В многозадачном режиме процессор часто переключается между программами. | При многопоточности процессор часто переключается между потоками. |
Память и Ресурс | В многозадачной системе приходится выделять отдельную память и ресурсы для каждой программы, которую выполняет ЦП. | В многопоточной системе приходится выделять память для процесса, несколько потоков этого процесса совместно используют одну и ту же память и ресурсы, выделенные процессу. |
Определение многозадачности
Многозадачность — это когда один ЦП выполняет несколько задач (программа, процесс, задача, потоки) одновременно. Для выполнения многозадачности ЦПУ очень часто переключается между этими задачами, так что пользователь может взаимодействовать с каждой программой одновременно.
В многозадачной операционной системе несколько пользователей могут совместно использовать систему одновременно. Как мы видели, процессор быстро переключается между задачами, поэтому требуется немного времени, чтобы переключиться с одного пользователя на другого. Это создает у пользователя впечатление, что ему посвящена вся компьютерная система.
Когда несколько пользователей совместно используют многозадачную операционную систему, планирование ЦП и мультипрограммирование позволяют каждому пользователю иметь по меньшей мере небольшую часть многозадачной ОС и позволять каждому пользователю иметь по меньшей мере одну программу в памяти для выполнения.
Определение многопоточности
Многопоточность отличается от многозадачности в том смысле, что многозадачность позволяет одновременно выполнять несколько задач, в то время как многопоточность позволяет обрабатывать несколько потоков одной задачи (программы, процесса) одним процессором одновременно.
Прежде чем изучать многопоточность, давайте поговорим о том, что такое поток? Поток — это базовая исполнительная единица, которая имеет свой собственный программный счетчик, набор регистров, стек, но разделяет код, данные и файл процесса, которому он принадлежит. Процесс может иметь несколько потоков одновременно, и процессор переключается между этими потоками так часто, что производит впечатление на пользователя, что все потоки работают одновременно, и это называется многопоточностью.
Многопоточность повышает быстродействие системы, так как, если один поток приложения не отвечает, другой будет отвечать в этом смысле, и пользователю не придется сидеть без дела. Многопоточность позволяет совместно использовать ресурсы, так как потоки, принадлежащие одному и тому же процессу, могут совместно использовать код и данные процесса, и это позволяет процессу иметь несколько потоков одновременно активными в одном и том же адресном пространстве . Создание другого процесса обходится дороже, поскольку система должна распределять разные памяти и ресурсы для каждого процесса, но создавать потоки легко, поскольку не требуется выделять отдельную память и ресурсы для потоков одного и того же процесса.
Ключевые различия между многозадачностью и многопоточностью в ОС
- Основное различие между многозадачностью и многопоточностью состоит в том, что в многозадачности система позволяет выполнять несколько программ и задач одновременно, тогда как в многопоточности система выполняет несколько потоков одного и того же или разных процессов одновременно.
- В многозадачном режиме процессор должен переключаться между несколькими программами, чтобы казалось, что несколько программ работают одновременно. С другой стороны, в многопоточном процессоре приходится переключаться между несколькими потоками, чтобы создать впечатление, что все потоки работают одновременно.
- Многозадачность выделяет отдельную память и ресурсы для каждого процесса / программы, тогда как в многопоточных потоках, принадлежащих одному и тому же процессу, используется та же память и ресурсы, что и у процесса.
Заключение:
Многозадачность похожа на многозадачность, тогда как многозадачность — это многозадачность на основе потоков. Многопоточность менее затратна, чем многозадачность, поскольку потоки легче создать, чем процесс.
7) Многопоточность против многопроцессорности
Многопроцессорная система имеет более двух процессоров. Процессоры добавляются в систему, что помогает увеличить скорость вычислений в системе. Каждый процессор имеет свой набор регистров и основную память.
Однако, поскольку каждый ЦП является отдельным, может случиться так, что одному ЦП может быть нечего обрабатывать. Один процессор может бездействовать, а другой может быть перегружен конкретными процессами. В таком случае процесс и ресурсы динамически распределяются между процессорами.
В этом уроке вы узнаете:
- Что такое многопроцессорная обработка?
- Что такое многопоточность?
- Характеристики многопроцессорной обработки:
- Характеристики многопоточности
- Разница между многопроцессорностью и многопоточностью
- Преимущество многопроцессорности
- Преимущество многопоточности
- Недостаток многопроцессорности
- Недостаток многопоточности
Что такое многопоточность?
Многопоточность – это метод выполнения программы, который позволяет одному процессу иметь несколько сегментов кода (например, потоков). Он также работает одновременно в «контексте» этого процесса. Многопоточные приложения – это приложения, в которых два или более потоков работают одновременно. Поэтому он также известен как параллелизм.
Характеристики многопроцессорной обработки
Вот основные функции многопроцессорной обработки:
- Многопроцессорность классифицируется в соответствии с тем, как организована их память.
- Многопроцессорная обработка повышает надежность системы
- Многопроцессорная обработка может повысить производительность путем разложения программы на параллельные исполняемые задачи.
Характеристики многопоточности
Вот важные аспекты многопоточности:
- В процессе многопоточности каждый поток работает параллельно друг другу.
- Потоки не позволяют разделить область памяти. Поэтому он экономит память и обеспечивает лучшую производительность приложений.
Разница между многопроцессорностью и многопоточностью
Вот важные различия между многопроцессорностью и многопоточностью.
параметр | многопроцессорная обработка | Многопоточность |
---|---|---|
основной | Многопроцессорность помогает вам увеличить вычислительную мощность. | Многопоточность помогает вам создавать вычислительные потоки одного процесса для увеличения вычислительной мощности. |
выполнение | Это позволяет вам выполнять несколько процессов одновременно. | Несколько потоков одного процесса выполняются одновременно. |
Переключение процессора | В многопроцессорной обработке ЦП должен переключаться между несколькими программами, чтобы было похоже, что несколько программ выполняются одновременно. | В многопоточности ЦП должен переключаться между несколькими потоками, чтобы создать впечатление, что все потоки работают одновременно. |
Создание | Создание процесса происходит медленно и зависит от ресурсов. | Создание потока экономно по времени и ресурсам. |
классификация | Многопроцессорная обработка может быть симметричной или асимметричной. | Многопоточность не классифицируется. |
Память | Многопроцессорная обработка выделяет отдельную память и ресурсы для каждого процесса или программы. | Многопоточные потоки, принадлежащие одному и тому же процессу, используют ту же память и ресурсы, что и у процесса. |
Травление объектов | Многопоточность позволяет избежать травления. | Многопроцессорная обработка основывается на выделении объектов в памяти для отправки другим процессам. |
программа | Многопроцессорная система позволяет выполнять несколько программ и задач. | Многопоточная система выполняет несколько потоков одинаковых или разных процессов. |
Затраченное время | Меньше времени уходит на обработку задания. | Умеренное количество времени уходит на обработку задания. |
Преимущество многопроцессорности
Вот минусы / плюсы мультипроцессинга:
- Самым большим преимуществом многопроцессорной системы является то, что она помогает выполнять больше работы в более короткие сроки.
- Код обычно прост.
- Использует преимущества нескольких процессоров и ядер
- Помогает избежать ограничений GIL для CPython
- Удалите примитивы синхронизации, если только вы не используете общую память.
- Дочерние процессы в основном прерываются / убиваются
- Это поможет вам выполнить работу в более короткие сроки.
- Эти типы систем следует использовать, когда для обработки большого объема данных требуется очень высокая скорость.
- Многопроцессорные системы экономят деньги по сравнению с однопроцессорными системами, поскольку процессоры могут совместно использовать периферийные устройства и источники питания.
Преимущество многопоточности
Вот преимущества / преимущества многопоточности:
- Потоки имеют одинаковое адресное пространство
- Потоки имеют малый вес и занимают мало памяти
- Стоимость связи между потоками низкая.
- Доступ к состоянию памяти из другого контекста проще
- Это позволяет легко создавать адаптивные интерфейсы
- Идеальный вариант для приложений ввода-вывода
- Занимает меньше времени для переключения между двумя потоками в общей памяти и время для завершения
- Потоки запускаются быстрее, чем процессы, а также при переключении задач.
- Все потоки имеют общий пул памяти процесса, что очень полезно.
- Занимает меньше времени для создания нового потока в существующем процессе, чем новый процесс
Недостаток многопроцессорности
Вот минусы / минусы при использовании многопроцессорной операционной системы
- IPC (межпроцессное взаимодействие) довольно сложный с большими накладными расходами
- Имеет больший объем памяти
Недостаток многопоточности
Вот минусы / недостатки использования многопоточной системы:
- Многопоточная система не прерываемая / убиваемая
- Если не следует очереди команд и модели сообщений, тогда необходимо ручное использование синхронизации, что становится необходимостью
- Код, как правило, сложнее понять, и его потенциал в условиях гонки резко возрастает.
Ключевые ОТЛИЧИЯ:
- Многопроцессорная система имеет более двух процессоров, тогда как многопоточность – это метод выполнения программы, который позволяет одному процессу иметь несколько сегментов кода.
- Многопроцессорная обработка повышает надежность системы, тогда как в многопоточном процессе каждый поток работает параллельно друг другу.
- Многопроцессорность помогает вам увеличить вычислительную мощность, тогда как многопоточность помогает создавать вычислительные потоки одного процесса.
- В многопроцессорной обработке процесс создается медленно и зависит от ресурсов, тогда как в многопрограммировании создание потока экономично по времени и ресурсам.
- Многопоточность предотвращает выборку, тогда как многопроцессорная обработка полагается на выборку объектов в памяти для отправки другим процессам.
- Многопроцессорная система занимает меньше времени, в то время как для обработки работы требуется умеренное количество времени.