Лекция №10: Многозадачность и многопоточность
Многозадачность (multitasking) – это способность операционной системы выполнять несколько программ одновременно. В основе реализации этого принципа на персональных ЭВМ лежит использование операционной системой аппаратного таймера для выделения отрезков времени (time sliced) для каждого из одновременно выполняемых процессов. Если эти отрезки времени достаточно малы, и машина не перегружена слишком большим числом программ, то пользователю кажется, что все эти программы выполняются параллельно.
Многопоточность (multithreading) – режим, при котором машинная программа содержит в себе параллельно исполняемые участки или процедуры (threads). Таким образом, механизм многопоточности дает возможность программе самой быть многозадачной.
Идея многозадачности не нова. Многозадачность реализуется на больших многопользовательских компьютерах типа мэйнфрэйм (mainframe), к которым подключены десятки, сотни терминалов. У каждого пользователя, сидящего за экраном такого терминала, создается впечатление, что он имеет эксклюзивный доступ ко всей машине. Кроме того, операционные системы таких компьютеров часто дают возможность пользователям перевести задачу в фоновый режим, где они выполняются в то время, как пользователь может работать с другой программой.
Персональные компьютеры на заре своей юности аппаратно не поддерживали многозадачность. Это было вполне оправдано. С одной стороны, стремление к дешевизне приводило к упрощенным аппаратным решениям. С другой стороны, пользователь и так получал в свое распоряжение все ресурсы компьютера, а работать с несколькими программами одновременно невозможно для обычного пользователя. Для решения другой задачи, пользователь мог выйти из текущей программы и загрузить новую.
Однако, со временем, работа на персональном компьютере стала просто требовать многозадачности. Например, представьте, что вам необходимо распечатать страниц 100 текста, да еще на матричном принтере. На это занятие уходит несколько часов. И если, при этом, компьютер не может делать ничего большего, как посылать информацию принтеру, то насколько утомительным будет этот процесс. А ведь еще совсем недавно именно так и печатались курсовые, дипломные и другие работы.
Некоторый прообраз многозадачности, реализованной аппаратно, можно вывести из процессоров, имеющих систему прерываний. Обобщенно прерываниями микропроцессора называют реакцию на особые случаи, которая заключается в передаче управления от текущей программы специальной процедуре обслуживания. К таким требующим обработки случаям относится
появление сигналов от аппаратных компонентов (клавиатуры, динамически обновляемой памяти, видеокарты, таймера) о важных внешних событиях и сообщения внутренних блоков микропроцессора об ошибках или затруднениях в работе программы (например, деление на ноль, запрещенный доступ к памяти). Часто под прерываниями узко понимают только запросы первого типа, а запросы второго типа называют исключениями.
Схема обработки прерывания следующая:
— работа основной программы пользователя;
— сохранение параметров работающей программы (регистров процессора);
— переход по адресу процедуры обработки прерывания;
— выполнение процедуры обработки прерывания;
— восстановление параметров работающей программы;
— переход по адресу следующей команды основной программы. Прерывания с более высоким приоритетом, в свою очередь, могут
прервать обработку текущего прерывания и т.д.
Прерывания использовались для написания так называемых резидентных
(terminate-and-stay-resident, TSR) программ. Данные программы позволяли писать драйверы клавиатуры, спулеры печати, копировальщики экрана, которые работали в фоновом режиме. Но порядок работы процессора оставался прежним – в конкретный момент времени процессор выполнял только одну программу, и только эта программа могла вернуть управление той, которую прервала. И, если происходил сбой в работе резидентной программы или при обработке прерывания, компьютер «зависал» и не давал возможности вернутся к прерванной программе.
Другой очевидный недостаток работы по прерываниям, заключается в том, что порядок смены программных участков аналогичен использованию процедур и функций – то есть четкая схема порядка следования программных элементов – из прерывания можно было вернутся только в ту программу, во время которой произошло прерывания, и это невозможно сделать до окончания всех действий прерывания.
Другим примером вытесняющей многозадачности являются многопользовательские операционные системы, которые используют системный таймер для периодического прерывания одной задачи и запуска другой. Таким образом, новая задача как бы вытесняет выполняемую.
16-и разрядная Windows уже стала поддерживать и вытесняющую многозадачность (non-preemptive multitasking). Такой тип многозадачности стал возможен благодаря основанной на сообщениях архитектуре Windows. Windows – программа может находиться в памяти и не выполняться до тех пор, пока не получила сообщение. Ранее, эти сообщения часто являлись прямым или косвенным результатом ввода информации пользователем с клавиатуры или
мыши. Сейчас, механизм посылки сообщений широко используется и для обмена данными, инициации какого-либо действия приложения и т.п.
При всем при этом, Windows использовала вытесняющую многозадачность для выполнения DOS – программ, а также позволяла некоторым программам, например, для целей мультимедиа, получать аппаратные прерывания от таймера.
Существенным ограничением такого подхода является то, что время, затрачиваемое программой на обработку сообщения может быть очень большим, а управление операционной системе передается только после обработки сообщения.
Частично преодолеть последнее ограничение, можно, опять таки используя таймер для периодической смене выполняемых программ. Другим решением по преодолению невытесняющей многозадачности является вызов функции PeekMessage. Обычно программа использует вызов функции GetMessage для извлечения сообщений из очереди. Однако, если в данный момент времени очередь сообщений пуста, то функция GetMessage будет ждать поступления сообщения в очередь, а затем возвратит его. Функция PeekMessage работает иначе – она возвращает управление программе даже в том случае, если сообщений в очереди нет. Таким образом, выполнение работы, требующей больших затрат времени, будет продолжаться до того момента, пока в очереди не появятся сообщения для данной или любой другой программы.
Многопоточность
В многопоточной среде программы могут быть разделены на части, называемыми потоками выполнения (threads), которые выполняются одновременно. В терминах программы «поток» – это прости функция, которая может также вызывать другие функции программы. Программа начинает выполнятся со своего главного (первичного) потока, который в традиционных программах на языке С является функцией main, а в Windows-программах – WinMain. Будучи выполняемой, функция может создавать новые потоки обработки, выполняя системный вызов с указанием функции инициализации потока (initial threading function). Операционная система в вытесняющем режиме переключает управление между потоками подобно тому, как она это делает с процессами. Таким образом, многопоточность есть реализация принципа многозадачности внутри программы.
Программная реализация многозадачности
Когда пользователь запускает программу, Windows создает в памяти компьютера экземпляр программы, называемый процессом. Процесс не является точной копией *.ехе – файла, как это было, например в операционной системе ДОС. Процесс содержит в себе копию *.ехе – файла, а также некоторую другую информацию о функционировании данного приложения. В
этой дополнительной информации хранятся, например, границы выделенной приложению памяти, что помогает аппаратно отслеживать корректности обращения к оперативной памяти со стороны приложения. Так как Windows поддерживает механизм виртуальной памяти, то среди этой информации находятся сведения о расположении сегментов программы. Здесь же содержится командная строка, формируемая при запуске программы.
Запустить процесс можно как при помощи командной строки системного меню Windows, при помощи программы Проводника, так и программно, из другого приложения. Это можно выполнить при помощи функций API:
Для 16-битных приложений используется функция WinExec:
LPCSTR lpCmdLine , // command line UINT uCmdShow // window style
Первый параметр является командной строкой, в которой указывается имя файла и параметры, указываемые после имени загружаемого файла.
После запуска, программа начинает параллельную работу относительно приложения-родителя и ее выполнение не зависит от других приложений, если, конечно, зависимость не предусмотрена самой природой приложений.
Чем многопоточность отличается от многозадачности
Разница между многозадачностью и многопоточностью в ОС заключается в том, что в многозадачном ЦПУ пользователь может выполнять несколько задач, тогда как многопоточность — это процесс, который создает несколько потоков одного процесса, которые увеличивают мощность компьютера.
Многозадачность против многопоточности в ОС
В операционной системе два наиболее важных понятия — многозадачность и многопоточность. В многозадачном режиме процессор позволяет пользователю выполнять несколько задач, в то время как многопоточность — это процесс, который создает несколько потоков одного процесса, которые увеличивают мощность компьютера. Многозадачность на основе потоков известна как многопоточность. Многозадачность также известна как многопроцессорность. Двумя наиболее важными понятиями в информатике являются многопроцессорность и многопоточность. Многопроцессорность — это процесс, который добавляет CPU к мощности, тогда как многопоточность — это процесс, который создает несколько потоков одного процесса, которые увеличивают мощность компьютера. Работа многопроцессорной и многопоточности заключается в том, чтобы увеличить мощность компьютера. Потребление памяти при любой обработке влияет на мощность компьютера, благодаря использованию методов многопроцессорной обработки и многопоточности осуществляется эффективное использование вычислительной мощности компьютера. Система с более чем одним процессором называется многопроцессорной системой. Для увеличения мощности компьютера добавлено более двух процессоров. CPU имеет набор регистров, процесс хранится в этих регистрах. Например, если производится процесс сложения двух чисел, целые числа сохраняются в регистрах, а сложение чисел также сохраняется в регистре. Если будет более одного процесса, будет больше регистров, чем если один процессор будет работать, а другой будет свободен, таким образом увеличивается мощность компьютера. В многопоточности создается несколько потоков. Поток в многопоточности — это процесс, означающий сегмент кода процесса. Поток имеет свой собственный идентификатор потока, счетчик программ, регистры и стек.Если мы создаем отдельные процессы для каждой службы, то каждый процессор совместно использует код, данные и системные ресурсы. Если мы не создадим потоки, система может исчерпать себя. Создание потоков может облегчить работу процессора. Скорость отклика увеличивается в многопоточности, и это лучшее преимущество использования многопоточности. Большим преимуществом многопоточности является совместное использование ресурсов, а при совместном использовании ресурсов несколько потоков процесса совместно используют один и тот же код. Когда ЦП выполняет несколько задач, представляющих собой программу, процесс, задачу и поток, он называется многозадачностью. Задача часто переключается, чтобы пользователь мог выполнить весь процесс одновременно. Многие пользователи могут использовать систему одновременно. Планирование ЦП и мультипрограммирование используются в ОС для многозадачности.
Сравнительная таблица
| Многозадачность | Многопоточность |
| В многозадачном режиме процессор позволяет пользователю выполнять несколько задач | Многопоточность — это процесс, который создает несколько потоков одного процесса, которые увеличивают мощность компьютера. |
| коммутация | |
| В многозадачности переключение между задачами происходит | В многопоточности переключение между потоками происходит |
| многопроцессорная обработка | |
| Многопроцессорность является частью многозадачности | Многопроцессорность не является частью многопоточности |
| Память | |
| В многозадачности процесс не разделяет одну и ту же память | В многопоточном процессе делят одну и ту же память |
Что такое многозадачность?
Когда ЦП выполняет несколько задач, представляющих собой программу, процесс, задачу и поток, он называется многозадачностью. Задача часто переключается, чтобы пользователь мог выполнить весь процесс одновременно. Многие пользователи могут использовать систему одновременно. Планирование ЦП и мультипрограммирование используются в ОС для многозадачности. Система с более чем одним процессором называется многопроцессорной системой. Для увеличения мощности компьютера добавлено более двух процессоров. CPU имеет набор регистров, процесс хранится в этих регистрах. Например, если производится процесс сложения двух чисел, целые числа сохраняются в регистрах, а сложение чисел также сохраняется в регистре. Если будет более одного процесса, будет больше регистров, чем если один процессор будет работать, а другой будет свободен, таким образом увеличивается мощность компьютера. Существуют типы процессоров, такие как симметричная многопроцессорная и асимметричная многопроцессорная. Если говорить о симметричной многопроцессорности, то при симметричной многопроцессорности процессор может свободно запускаться и может запускать любой процесс, тогда как в случае многопоточности существует отношение мастер-сальве. В многопроцессорной обработке имеется встроенный контроллер памяти, задача которого заключается в добавлении дополнительной памяти.
Что такое многопоточность?
Когда ЦП выполняет несколько задач, представляющих собой программу, процесс, задачу и поток, он называется многозадачностью. Задача часто переключается, чтобы пользователь мог выполнить весь процесс одновременно. Многие пользователи могут использовать систему одновременно. Планирование ЦП и мультипрограммирование используются в ОС для многозадачности.
В многопоточности создается несколько потоков. Поток в многопоточности — это процесс, означающий сегмент кода процесса. Поток имеет свой собственный идентификатор потока, счетчик программ, регистры и стек. Если мы создаем отдельные процессы для каждой службы, то каждый процессор совместно использует код, данные и системные ресурсы. Если мы не создадим потоки, система может исчерпать себя. Создание потоков может облегчить работу процессора. Скорость отклика увеличивается в многопоточности, и это лучшее преимущество использования многопоточности. Большим преимуществом многопоточности является совместное использование ресурсов, а при совместном использовании ресурсов несколько потоков процесса совместно используют один и тот же код.
Русские Блоги
В чем разница между несколькими процессами и многопоточная? Преимущества и недостатки многозадачности и многопоточных
Основное различие между несколькими процессами и мульти-нитей является то, что нить является подмножеством процесса (часть), и один процесс может состоять из нескольких потоков. Данные Мультипроцессный отдельно, разделив комплекс, потребность IPC, но одновременно. Многопоточная обмена данных процесса, простой общий доступ, но синхронизация является сложной.
Есть два способа, чтобы посылать путь в мульти-процесса, и есть два пути, чтобы посылать; прямые и поставлены в очередь. Windows , или некоторые запущенные приложения могут непосредственно публиковать сообщения в процедурах окна или сообщения могут быть доставлены в иконки столбцов сообщение ОС выполняется в данный момент драйвер Event Непрерывные Queue опроса сообщение не является от порядка событий. Контроль, но в результате инцидента, инцидент является случайным , не зная, что позволяет программе, чтобы организовать процедуру программы с различными разумного порядка.
Многопоточность (английский: Многопоточность) относится к методам, которые реализуют несколько потоков одновременно с программного или аппаратного обеспечения. Компьютеры с возможностями многопоточной может выполнять более одного потока в то же время из-за аппаратной поддержки, а затем улучшить общую производительность обработки. Системы с этой возможностью включают в себя симметричные процессоры, многоядерные процессоры и многопоточность чипа уровня или процессоры Одновременной многопоточности. [1] В программе, независимо друг от друга эти работающие фрагменты программы называются «нить», который называется «Многопоточность». Компьютеры с возможностями многопоточной может выполнять более одного потока, в то же время из-за аппаратной поддержки (Тайвань переводит «выполнение»), что в свою очередь повышает общую производительность обработки.
I. В чем разница между несколькими процессами и многопоточная?
Программирование многопроцессных мульти-процесс программирования менее многопоточное программирования под Linux.
IBM есть парень, который сделал тест, и обнаружил, что Windows, более чем в шесть раз при переключении контекста потока. Самый быстрый замок (критический раздел Windows2k и pthread_mutex в Linux), Windows в 5 раз быстрее, чем Linux. Конечно, это не хорошо, и после практического программирования, я чувствую, что Linux больше подходит для высокой производительности сервера, но Linux еще немного немного Windows, в многопоточном этой конкретной области. Это должно быть доступным, в конце концов, семейство UNIX происходит от нескольких процессов, и Windows, многопоточность из головы.
Если это среда UNIX / Linux, нет необходимости использовать многопоточный.
Многопоточность выше, чем производительность нескольких процессов? Ошибка!
Надо сказать, что многопоточности ниже многофункциональной стоимости, но производительность ниже.
В среде UNIX, многопользовательский планирование процесса накладных расходов накладные расходы, чем многопоточные расписанию, нет существенной разницы, то есть UNIX эффективность планирования процесса очень высока. С точки зрения потребления памяти, два только глобальная область данных. Теперь память очень дешево, а сервер сохраняется на сервере, и это не является проблемой.
Multi-процесс трехмерной транспортной системы. Хотя стоимость высока, спуск под гору мульти-масло, но не пробки.
Многопоточность плоская транспортная система, низкая стоимость, но есть слишком много светофоров, старые пробки.
Мы сейчас за рулем автомобиля, а некоторые масла (основной частоты) является, не боится идти вниз по склону вниз, боится пробок.
Высокопроизводительный торговый сервер промежуточного программного обеспечения, такие как смокинг, является мульти-процесс. Фактический тест показывает, что производительность смокинга и одновременно эффективность очень высоки. Смокинг является Bell Lab, с Unix. Это должно быть самым глубоким пониманием UNIX, и их мнения должны иметь большое значение ссылочного.
Во-вторых, преимущества и недостатки многозадачности и многопоточной:
мульти-Прогресс:
Мульти-технологические преимущества:
1. Каждый процесс не зависит друг от друга, не влияет на стабильность основной программы, и не существует никакой связи между суб-процесса аварий;
2, за счет увеличения CPU, она может быть легко расширена;
3, вы можете свести к минимуму воздействие блокировки нити / разблокировки, значительно повысить производительность, даже если поток работает модуль алгоритма низка;
4. Каждого дочерний процесс имеет 2 Гб адресного пространства и связанные с ними ресурсы, и общая производительность способна производительность очень велика.
Multi-технологические недостатки:
1, логика управление сложное, нужно взаимодействовать с основной программой;
2, необходимо, чтобы пересечь границу процесса, если есть большое количество передачи данных, он не очень хорошо, подходит для небольших передач данных, интенсивный расчет график мульти-процесс является относительно большим;
3, предпочтительно мульти-процесс, и сочетание многопоточное, то есть, в соответствии с фактическими потребностями, каждый процессор очередь на дочерний процессе, который открывает мульти-тему, может быть обработана для нескольких типов данных. Конечно, вы также можете использовать многопоточность + многопроцессорных + режим опроса для решения проблем .
4, методы и средства разнообразны, ключевым является то, что, кажется, что это удобно для удовлетворения требований, стоимость также подходит.
Многопоточность:
Преимущества многопоточной:
1, нет необходимости пересекать границу процесса;
2. Простая логика программы и режим управления;
3. Все потоки могут совместно использовать память и переменные непосредственно;
4, общий ресурс, потребляемый режиме резьбы лучше, чем процесс.
Многопоточных недостатки:
1. Каждый поток разделяется с основной программой, которая ограничена 2 Гб адресного пространства;
2, синхронизация и управление блокировки между потоками являются более трудными;
3. Крах нити может повлиять на стабильность всей программы;
4. После достижения определенного количества потоков, даже если ЦП не может улучшить производительность, такие как Windows Server 2003, примерно в 1500 потоках быстро ограничен (стек потока, установленный на 1 м), если установить резьба стека 2 м, но и меньше чем 1500 потоков;
5, потоки могут улучшить общую производительность, а после потока планирование самого потока также является проблемой, и есть необходимость потребляет больше процессоров.
Разница между многозадачностью и многопоточностью в ОС
В этой статье мы обсудим различия между многозадачностью и многопоточностью. Люди обычно путаются между этими терминами. С одной стороны, многозадачность является логическим расширением многозадачности, а с другой стороны, многозадачность является многозадачностью на основе потоков. Основное различие между многозадачностью и многопоточностью заключается в том, что многозадачность позволяет процессору одновременно выполнять несколько задач (программа, процесс, задача, потоки), тогда как многопоточность позволяет одновременно выполнять несколько потоков одного и того же процесса. Давайте обсудим различия между многозадачностью и многопоточностью с помощью сравнительной таблицы, показанной ниже.
Сравнительная таблица
| Основа для сравнения | Многозадачность | Многопоточность |
|---|---|---|
| основной | Многозадачность позволяет процессору выполнять несколько задач одновременно. | Многопоточность позволяет процессору одновременно выполнять несколько потоков процесса. |
| Переключение | В многозадачном режиме процессор часто переключается между программами. | При многопоточности процессор часто переключается между потоками. |
| Память и Ресурс | В многозадачной системе приходится выделять отдельную память и ресурсы для каждой программы, которую выполняет ЦП. | В многопоточной системе приходится выделять память для процесса, несколько потоков этого процесса совместно используют одну и ту же память и ресурсы, выделенные процессу. |
Определение многозадачности
Многозадачность — это когда один ЦП выполняет несколько задач (программа, процесс, задача, потоки) одновременно. Для выполнения многозадачности ЦПУ очень часто переключается между этими задачами, так что пользователь может взаимодействовать с каждой программой одновременно.
В многозадачной операционной системе несколько пользователей могут совместно использовать систему одновременно. Как мы видели, процессор быстро переключается между задачами, поэтому требуется немного времени, чтобы переключиться с одного пользователя на другого. Это создает у пользователя впечатление, что ему посвящена вся компьютерная система.
Когда несколько пользователей совместно используют многозадачную операционную систему, планирование ЦП и мультипрограммирование позволяют каждому пользователю иметь по меньшей мере небольшую часть многозадачной ОС и позволять каждому пользователю иметь по меньшей мере одну программу в памяти для выполнения.
Определение многопоточности
Многопоточность отличается от многозадачности в том смысле, что многозадачность позволяет одновременно выполнять несколько задач, в то время как многопоточность позволяет обрабатывать несколько потоков одной задачи (программы, процесса) одним процессором одновременно.
Прежде чем изучать многопоточность, давайте поговорим о том, что такое поток? Поток — это базовая исполнительная единица, которая имеет свой собственный программный счетчик, набор регистров, стек, но разделяет код, данные и файл процесса, которому он принадлежит. Процесс может иметь несколько потоков одновременно, и процессор переключается между этими потоками так часто, что производит впечатление на пользователя, что все потоки работают одновременно, и это называется многопоточностью.
Многопоточность повышает быстродействие системы, так как, если один поток приложения не отвечает, другой будет отвечать в этом смысле, и пользователю не придется сидеть без дела. Многопоточность позволяет совместно использовать ресурсы, так как потоки, принадлежащие одному и тому же процессу, могут совместно использовать код и данные процесса, и это позволяет процессу иметь несколько потоков одновременно активными в одном и том же адресном пространстве .
Создание другого процесса обходится дороже, поскольку система должна распределять разные памяти и ресурсы для каждого процесса, но создавать потоки легко, поскольку не требуется выделять отдельную память и ресурсы для потоков одного и того же процесса.
Ключевые различия между многозадачностью и многопоточностью в ОС
- Основное различие между многозадачностью и многопоточностью состоит в том, что в многозадачности система позволяет выполнять несколько программ и задач одновременно, тогда как в многопоточности система выполняет несколько потоков одного и того же или разных процессов одновременно.
- В многозадачном режиме процессор должен переключаться между несколькими программами, чтобы казалось, что несколько программ работают одновременно. С другой стороны, в многопоточном процессоре приходится переключаться между несколькими потоками, чтобы создать впечатление, что все потоки работают одновременно.
- Многозадачность выделяет отдельную память и ресурсы для каждого процесса / программы, тогда как в многопоточных потоках, принадлежащих одному и тому же процессу, используется та же память и ресурсы, что и у процесса.
Заключение:
Многозадачность похожа на многозадачность, тогда как многозадачность — это многозадачность на основе потоков. Многопоточность менее затратна, чем многозадачность, поскольку потоки легче создать, чем процесс.