Чем многопоточность отличается от многозадачности
Перейти к содержимому

Чем многопоточность отличается от многозадачности

  • автор:

7. Многозадачность и многопоточность.

Многозадачность (англ. multitasking) — свойство операционной системы или среды выполнения обеспечивать возможность параллельной (или псевдопараллельной) обработки нескольких задач. Истинная многозадачность операционной системы возможна только в распределённых вычислительных системах.

Существует 2 типа многозадачности:

  • Процессная многозадачность (основанная на процессах — одновременно выполняющихся программах). Здесь программа — наименьший элемент управляемого кода, которым может управлять планировщик операционной системы. Более известна большинству пользователей (работа в текстовом редакторе и прослушивание музыки).
  • Поточная многозадачность (основанная на потоках). Наименьший элемент управляемого кода — поток (одна программа может выполнять 2 и более задачи одновременно).

Многопоточность — специализированная форма многозадачности.

Свойства многозадачной среды Примитивные многозадачные среды обеспечивают чистое «разделение ресурсов», когда за каждой задачей закрепляется определённый участок памяти, и задача активизируется в строго определённые интервалы времени.

Более развитые многозадачные системы проводят распределение ресурсов динамически, когда задача стартует в памяти или покидает память в зависимости от её приоритета и от стратегии системы. Такая многозадачная среда обладает следующими особенностями:

  • Каждая задача имеет свой приоритет, в соответствии с которым получает процессорное время и память
  • Система организует очереди задач так, чтобы все задачи получили ресурсы, в зависимости от приоритетов и стратегии системы
  • Система организует обработку прерываний, по которым задачи могут активироваться, деактивироваться и удаляться
  • По окончании положенного кванта времени ядро временно переводит задачу из состояния выполнения в состояние готовности, отдавая ресурсы другим задачам. При нехватке памяти страницы невыполняющихся задач могут быть вытеснены на диск (своппинг), а потом, через определённое системой время, восстанавливаться в памяти
  • Система обеспечивает защиту адресного пространства задачи от несанкционированного вмешательства других задач
  • Система обеспечивает защиту адресного пространства своего ядра от несанкционированного вмешательства задач
  • Система распознаёт сбои и зависания отдельных задач и прекращает их
  • Система решает конфликты доступа к ресурсам и устройствам, не допуская тупиковых ситуаций общего зависания от ожидания заблокированных ресурсов
  • Система гарантирует каждой задаче, что рано или поздно она будет активирована
  • Система обрабатывает запросы реального времени
  • Система обеспечивает коммуникацию между процессами

Типы псевдопараллельной многозадачности

Простое переключение

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

Преимущества: можно задействовать уже работающие программы, написанные без учёта многозадачности.

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

Совместная или кооперативная многозадачность

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

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

Недостатки: неспособность всех приложений работать в случае ошибки в одном из них, приводящей к отсутствию вызова операции «отдать процессорное время». Крайне затрудненная возможность реализации многозадачной архитектуры ввода-вывода в ядре ОС, позволяющей процессору исполнять одну задачу в то время, как другая задача инициировала операцию ввода-вывода и ждет её завершения.

Вытесняющая, или приоритетная, многозадачность (режим реального времени)

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

возможность полной реализации многозадачного ввода-вывода в ядре ОС, когда ожидание завершения ввода-вывода одной программой позволяет процессору тем временем исполнять другую программу; cильное повышение надежности системы в целом, в сочетании с использованием защиты памяти — идеал в виде «ни одна программа пользовательского режима не может нарушить работу ОС в целом» становится достижимым хотя бы теоретически, вне вытесняющей многозадачности он не достижим даже в теории. возможность полного использования многопроцессорных и многоядерных систем.

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

Конспектики

  • by kvckr
  • kvckrr@gmail.com

Монозадачность против многозадачности. Многозадачность: В чем разница? (плюс когда их использовать)

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

Монозадачность vs. многозадачность

Существует несколько ключевых различий между монозадачностью и многозадачностью, в том числе:

Как вы выполняете задания

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

Как вы управляете своим вниманием

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

Насколько широк ваш объем работы

Объем вашей работы может быть шире, если вы работаете в режиме многозадачности. Это происходит потому, что вы сосредоточены на нескольких видах деятельности, которые могут быть несколькими темами или областями. При монозадачности объем работы может быть меньше, чем при многозадачности, поскольку вы сосредоточены на одной задаче. Важно отметить, что масштаб одного проекта может быть широким из-за содержания или темы проекта.

Каков ваш уровень продуктивности

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

Каковы преимущества монозадачности?

Преимущества монозадачности включают в себя:

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

В чем преимущества многозадачности?

К преимуществам многозадачности относятся:

  • Позволяет продвигаться по нескольким проектам: При многозадачности вы можете продвигаться сразу по нескольким проектам, что может быть полезно для вас, если у вас мало времени или вы отстаете в работе.
  • Развивает технику предотвращения отвлечения внимания: Многозадачность обычно помогает вам разработать методы предотвращения отвлечений или прерываний, а также способы игнорирования этих отвлечений.
  • Формирует механизмы преодоления напряженной обстановки: Когда вокруг вас происходит много событий, многозадачность может помочь вам научиться справляться с этими обстоятельствами и при этом качественно работать.

Когда следует использовать монозадачность

Иногда монозадачность может оказаться наиболее эффективным и действенным способом справиться с рабочей нагрузкой, например:

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

Когда работать в режиме многозадачности

Подобно однозадачности, существуют ситуации, когда многозадачность может оказаться лучшим способом выполнения задач в отведенные сроки, например:

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

Советы по работе в режиме многозадачности

Учитывайте эти советы при работе в режиме многозадачности:

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

Советы по однозадачности

Учитывайте эти советы при монозадачности:

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

Ключевые слова:

  • indeed.com

Многопоточность и многопроцессорность – разница между ними

Ключевая разница между многопоточностью и многопроцессорностью

  • Многопроцессорная система имеет более двух процессоров, тогда как многопоточность — это метод выполнения программы, который позволяет одному процессу иметь несколько сегментов кода.
  • Многопроцессорность повышает надежность системы, поскольку в многопоточном процессе каждый поток выполняется параллельно друг другу.
  • Многопроцессорность помогает увеличить вычислительную мощность, тогда как многопоточность помогает создавать вычислительные потоки одного процесса.
  • В мультипроцессировании создание процесса происходит медленно и зависит от ресурсов, тогда как в мультипрограммировании создание потока экономно по времени и ресурсам.
  • Многопоточность позволяет избежать травления, тогда как многопроцессорность опирается на консервацию объектов в памяти для отправки другим процессам.
  • Многопроцессорная система занимает меньше времени, тогда как на обработку заданий уходит умеренное количество времени.

Что такое многопроцессорность?

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

Однако, поскольку каждый ЦП является отдельным, может случиться так, что одному ЦП нечего будет обрабатывать. Один процессор может сидеть idle, а другой может быть перегружен конкретными процессами. В таком случае процесс и ресурсы динамически распределяются между процессорами.

Что такое многопоточность?

Многопоточность — это метод выполнения программы, который позволяет одному процессу иметь несколько сегментов кода (например, потоков). Он также выполняется одновременно в «контексте» этого процесса. Многопоточные приложения — это приложения, которые имеют два или более потоков, выполняемых одновременно. Поэтому его также называют параллелизмом.

Характеристики многопроцессорной обработки

Вот основные особенности многопроцессорной обработки:

  • Многопроцессорные процессоры классифицируются по способу организации их памяти.
  • Многопроцессорность повышает надежность системы.
  • Многопроцессорность может повысить производительность за счет разложения программы на параллельные исполняемые задачи.

Характеристики многопоточности

Вот важные аспекты многопоточности:

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

Разница между многопроцессорностью и многопоточностью

Вот важные различия между многопоточностью и многопроцессорностью.

Разница между многопроцессорностью и многопоточностью

Параметр многопроцессорная обработка многопоточность
Базовый Многопроцессорность помогает увеличить вычислительную мощность. Многопоточность помогает создавать вычислительные потоки одного процесса для увеличения вычислительной мощности.
Типы Это позволяет одновременно выполнять несколько процессов. Одновременно выполняются несколько потоков одного процесса.
переключение процессора В режиме многопроцессорности процессору приходится переключаться между несколькими программами, чтобы создавалось впечатление, что несколько программ работают одновременно.neoусли. При многопоточности процессору приходится переключаться между несколькими потоками, чтобы создать впечатление, что все потоки выполняются одновременно.neoусли.
Создание Создание процесса происходит медленно и зависит от ресурсов. Создание темы экономно по времени и ресурсам.
классификация Многопроцессорность может быть симметричной или асимметричной. Многопоточность не классифицируется.
Память Многопроцессорность выделяет отдельную память и ресурсы для каждого процесса или программы. Многопоточные потоки, принадлежащие одному и тому же процессу, используют ту же память и ресурсы, что и сам процесс.
Объекты травления Многопоточность позволяет избежать травления. Многопроцессорность основана на сохранении объектов в памяти для отправки другим процессам.
FitPartner™ Многопроцессорная система позволяет выполнять множество программ и задач. Многопоточная система выполняет несколько потоков одного и того же или разных процессов.
Затраченное время На обработку заданий уходит меньше времени. На обработку задания уходит умеренное количество времени.

Преимущество многопроцессорности

Вот минусы/плюсы многопроцессорности:

  • Самым большим преимуществом многопроцессорной системы является то, что она помогает выполнить больше работы за более короткий период.
  • Код обычно прост.
  • Использует преимущества нескольких процессоров и ядер
  • Помогает вам избежать ограничений GIL для CPython.
  • Удалите примитивы синхронизации, если вы не используете общую память.
  • Дочерние процессы в большинстве случаев прерываемы/уничтожимы
  • Это поможет вам выполнить работу в более короткие сроки.
  • Эти типы систем следует использовать, когда для обработки большого объема данных требуется очень высокая скорость.
  • Многопроцессорные системы экономят деньги по сравнению с однопроцессорными системами, поскольку процессоры могут совместно использовать периферийные устройства и источники питания.

Преимущество многопоточности

Вот плюсы/преимущества многопоточности:

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

Недостаток многопроцессорности

Вот минусы/недостатки использования многопроцессорной операционной системы.

  • IPC (межпроцессное взаимодействие) довольно сложный процесс с большими накладными расходами.
  • Имеет больший объем памяти

Недостаток многопоточности

Вот минусы/недостатки использования многопоточной системы:

  • Многопоточная система не может быть прервана или уничтожена.
  • Если нет, следуйwing модель очереди команд и насоса сообщений, затем требуется ручное использование синхронизации, что становится необходимостью
  • Код обычно труднее понять, и вероятность возникновения условий гонки резко возрастает.
  • Алгоритм циклического планирования с примером
  • Синхронизация процессов: проблема критической секции в ОС
  • Планирование процессов в ОС: долгосрочный, средний, краткосрочный планировщик
  • Алгоритм приоритетного планирования: упреждающий, невытесняющий ПРИМЕР
  • Управление памятью в ОС: непрерывная, подкачка, фрагментация
  • Сначала самое короткое задание (SJF): пример с вытеснением и без вытеснения
  • Виртуальная память в ОС: что такое, пейджинг по требованию, преимущества
  • SSD против HDD: в чем разница между SSD и HDD

В чем разница между многопоточностью, многозадачностью и многопроцессовостью?

Может кто-нибудь обьяснить доступным языком различия между этими понятиями, или дать ссылку где это обьясняют?
upd
Интересует в рамках программирования, а не администрирования. Т.е. что означает «программа работает в несколько потоков», «программа может создавать новые процессы».

  • Вопрос задан более трёх лет назад
  • 17525 просмотров

Комментировать
Решения вопроса 2

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

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

А многозадачность это свойство ОС вычислять одновременно (*условно говоря) много задач (процессов и потоков) или проще говоря программ. Это дает вам возможность одновременно играть в игру и слушать музыку на своем компьютере.

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

Вывод. Если у вас 4-ех ядерный процессор, а ваша программа работает в один процесс с одним потоком, то ваша программа будет вычисляться всего лишь на 1 ядре. Поэтому можно создать 4 потока в одном процессе или 4 процесса по 1 потоку в каждом и тогда ваша программа смэппится на все ядра процессора и займет все его возможные мощности. В тоже время создание более 4 потоков или 4 процессов не будет иметь особого смысла, поскольку всё равно вы сможете параллельно вычислять только максимум 4 из них.

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

Ответ написан более трёх лет назад
Нравится 4 5 комментариев
sugadu @sugadu Автор вопроса

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

Как тогда не просходит конфликтов между потоками? Что будет если два потока начнут менять один участок памяти?

sugadu: так не бывает, если кто-то уже работает с участком памяти, остальные будут ждать, пока с этого участка памяти не будет снят лок (блокировка), который обязательно ставится прежде чем начать работу с этим участком памяти.

sugadu @sugadu Автор вопроса
xfg: Спасибо большое!

pi314

xfg: «так не бывает»
На самом деле еще как бывает 🙂 . если программист накосячил с синхронизацией ресурсов. что случается сплошь и рядом 🙂 Ибо в большинстве современных распространенных ЯП всякие локи, семафоры и мютексы нужно ставить ручками и делать это правильно. А что конкретно будет — зависит от компилятора и/или VM и набора инструкций и архитектуры процессора, на котором все это выполняется и даже от расположения звезд. В подавляющем большинстве случаев если неатомарные инструкции одного потока «вклинятся» между инструкциями из другого, код может увидеть в памяти вместо ожидаемых совершенно левые значения. Это приведет к непредсказуемой ошибке в программе (если речь о данных) или к попытке обратиться к памяти, не принадлежащей процессу (если речь об указателе), за что ОС этот процесс неминуемо жестоко покарает. а если такой косяк случится в коде какого-нибудь драйвера, работающего с железом, то вааще может упасть вся ОС или даже физически повредиться железо. Короче, ошибки в многопоточности — весьма распространенное явление и обычно отстреливают ногу по самые уши ))

pi314: я не очень вас понял, но помоему вы говорите о состоянии гонки.

Но я говорил, о том, как это работает на уровне железа, а не на уровне программного обеспечения. А именно, если два и более процессора (или ядра) одновременно хотят получить доступ на запись в один и тот же участок памяти, в один и тот же конкретный момент времени и если архитектура железа позволяет одновременную запись в один участок памяти то будет решено, по какому правилу произвести запись в этот участок памяти. Потому что в любом случае невозможно писать данные параллельно в один участок памяти в один момент времени на уровне железа. До этого наш уровень развития пока не дошел. При архитектуре железа с исключающей записью всё еще проще, там только один процессор (ядро) может получить доступ на запись в конкретную ячейку в кокрентый момент времени, о чем я и говорил.
Подробнее можно посмотреть здесь.

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

Nipheris

1. Многозадачность. Термин обычно не применяется к прикладному ПО, только к операционной системе, а точнее к ядрам ОС. Многозадачность — способость системного ПО распределять вычислительные ресурсы между несколькими параллельно (т.е. условно одновременно) запущенными вычислениями. Различают кооперативную и вытесняющую. Как правило, поддержка многозадачности сводится к тесной работе с железом и умению ядра сохранять состояние вычислительной системы (например, регистров процессора), и прозрачного переключения этого состояния для выполняющихся задач.

2. Многопоточность — вариант реализации вычислений, при котором для решения некоторой прикладной задачи запускаются и выполняются несколько независимых потоков вычислений, причём выполнение происходит одновременно или псевдоодновременно. В операционных системах, где термины «поток» и «процесс» различаются, под «потоком» понимают именно поток выполнения (ресурсами же владеет сущность, называемая «процессом»). Обычно применяется для распараллеливания вычислений на несколько вычислителей (процессоров и ядер процессора).

3. Многопроцессность — вариант реализации вычислений, когда для решения некоторой прикладной задачи запускается несколько независимых процессов. В системах, где под процессом понимается сущность, владеющая ресурсами (памятью, открытыми файлами, сетевыми подключениями), несколько процессов запускаются с целью повышения отказоустойчивости приложения а также с целью повышения безопасности. Т.к. ОС выполняет разделение памяти и прочих ресурсов именно между процессами (в то время как потоки работают в едином адресном пространстве), то а) внезапно упавший (читай — убитый ОС) процесс не уронит остальные; б) если в процессе начал выполняться чужеродный код (например, из-за RCE уязвимости), то он не получит доступ к содержимому памяти в других процессах. Многопроцессность сегодня можно увидеть в браузерах, когда отдельные вкладки выполняются в разных процессах, и упавшая вкладка (из-за js или из-за кривого плагина) тянет за собой не весь браузер, а только себя или еще пару вкладок.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *