В чем разница между параллелизмом, параллелизмом и асинхронными методами?
Параллелизм - это выполнение двух задач параллельно в разных потоках. Однако асинхронные методы выполняются параллельно, но в одном потоке. Как это достигается? Кроме того, как насчет параллелизма?
Каковы различия между этими 3 понятиями?
19 ответов
Параллельные и параллельные - фактически один и тот же принцип, который вы правильно предположили, оба связаны с задачами, выполняемыми одновременно, хотя я бы сказал, что параллельные задачи должны быть действительно многозадачными, выполняемыми "одновременно", тогда как одновременность может означать, что задачи совместно используют поток выполнения пока еще кажется выполняющимся параллельно.
Асинхронные методы напрямую не связаны с двумя предыдущими концепциями, асинхронность используется для представления впечатления от параллельных или параллельных задач, но, фактически, асинхронный вызов метода обычно используется для процесса, который должен выполнять работу вне текущего приложения, и мы не не хочу ждать и заблокировать наше приложение в ожидании ответа.
Например, получение данных из базы данных может занять некоторое время, но мы не хотим блокировать наш пользовательский интерфейс в ожидании данных. Асинхронный вызов принимает ссылку обратного вызова и возвращает выполнение обратно к вашему коду, как только запрос был размещен в удаленной системе. Ваш пользовательский интерфейс может продолжать отвечать пользователю, пока удаленная система выполняет любую необходимую обработку, как только он возвращает данные в ваш метод обратного вызова, тогда этот метод может обновить пользовательский интерфейс (или передать это обновление) в зависимости от ситуации.
С точки зрения пользователя это выглядит как многозадачность, но это не так.
РЕДАКТИРОВАТЬ
Вероятно, стоит добавить, что во многих реализациях асинхронный вызов метода вызовет ускорение потока, но это не существенно, это действительно зависит от выполняемой операции и того, как ответ может быть уведомлен обратно в систему.
Параллельность - это когда чередуется выполнение нескольких задач, а не каждая задача выполняется последовательно одна за другой.
Параллелизм - это когда некоторые задачи выполняются параллельно.
Асинхронность - это отдельное понятие (хотя и связано в некоторых контекстах). Это относится к тому факту, что одно событие может происходить в другое время (не синхронно) с другим событием. Приведенные ниже диаграммы иллюстрируют разницу между синхронным и асинхронным выполнением, когда участники могут соответствовать различным потокам, процессам или даже серверам.
Короче,
Параллелизм означает несколько задач, которые запускаются, запускаются и завершаются в перекрывающиеся периоды времени, без определенного порядка. Параллелизм - это когда несколько задач ИЛИ несколько частей уникальной задачи буквально выполняются одновременно, например, на многоядерном процессоре.
Помните, что параллелизм и параллелизм - это не одно и то же.
Различия между параллелизмом и параллелизмом
Теперь давайте перечислим замечательные различия между параллелизмом и параллелизмом.
Параллельность - это когда две задачи могут запускаться, выполняться и завершаться в перекрывающиеся периоды времени. Параллелизм - это когда задачи выполняются буквально одновременно, например. на многоядерном процессоре.
Параллелизм - это композиция независимо выполняющихся процессов, а параллелизм - одновременное выполнение (возможно, связанных) вычислений.
Параллелизм - это работа со многими вещами одновременно. Параллелизм заключается в том, чтобы делать много вещей одновременно.
Приложение может быть параллельным, но не параллельным, что означает, что оно обрабатывает более одной задачи одновременно, но никакие две задачи не выполняются одновременно.
Приложение может быть параллельным, но не параллельным, что означает, что оно одновременно обрабатывает несколько подзадач задачи в многоядерном процессоре.
Приложение не может быть ни параллельным, ни параллельным, что означает, что оно обрабатывает все задачи по одному, последовательно.
Приложение может быть как параллельным, так и параллельным, что означает, что оно одновременно обрабатывает несколько задач в многоядерном процессоре.
совпадение
Параллельность по существу применима, когда мы говорим о двух или более задачах. Когда приложение способно выполнять две задачи практически одновременно, мы называем это параллельным приложением. Хотя здесь задачи запускаются, похоже, одновременно, но по сути они МОГУТ не быть. Они используют функцию временной синхронизации процессора в операционной системе, где каждая задача выполняет часть своей задачи, а затем переходит в состояние ожидания. Когда первая задача находится в состоянии ожидания, ЦП назначается второй задаче, чтобы выполнить свою часть задачи.
Операционная система основана на приоритете задач, таким образом, назначает процессор и другие вычислительные ресурсы, например память; По очереди переходите ко всем задачам и дайте им возможность выполнить. Конечному пользователю кажется, что все задачи выполняются параллельно. Это называется параллелизмом.
параллелизм
Параллелизм не требует двух задач для существования. Он буквально физически выполняет части задач ИЛИ несколько задач одновременно, используя многоядерную инфраструктуру ЦП, назначая одно ядро для каждой задачи или подзадачи.
Параллелизм требует аппаратного обеспечения с несколькими процессорами, по сути. В одноядерном процессоре вы можете получить параллелизм, но НЕ параллелизм.
Асинхронные методы
Это не связано с параллелизмом и параллелизмом, асинхронность используется для представления впечатления от параллельных или параллельных задач, но фактически асинхронный вызов метода обычно используется для процесса, который должен выполнять работу вне текущего приложения, и мы не хотим подождите и заблокируйте наше приложение в ожидании ответа.
Существует несколько сценариев, в которых может происходить параллелизм:
Асинхронность- это означает, что ваша программа выполняет неблокирующие операции. Например, он может инициировать запрос на удаленный ресурс через HTTP, а затем продолжить выполнение какой-то другой задачи, ожидая ответа. Это похоже на то, когда вы отправляете электронное письмо, а затем продолжаете свою жизнь, не дожидаясь ответа.
Параллелизм- это означает, что ваша программа использует аппаратное обеспечение многоядерных машин для одновременного выполнения задач, разбивая работу на задачи, каждая из которых выполняется на отдельном ядре. Это похоже на пение в душе: на самом деле вы делаете две вещи одновременно.
Многопоточность- это программная реализация, позволяющая выполнять разные потоки одновременно. Многопоточная программа, кажется, делает несколько вещей одновременно, даже когда она работает на одноядерном компьютере. Это немного похоже на общение с разными людьми через разные окна чата; хотя вы на самом деле переключаетесь назад и вперед, общий результат заключается в том, что вы ведете несколько разговоров одновременно.
Параллелизм означает выполнение нескольких задач одновременно, но не обязательно одновременно. Когда вам нужно выполнить несколько задач, но у вас есть один ресурс, мы переходим к параллелизму. В одноядерной среде параллелизм достигается переключением контекста.
Параллелизм - это как выполнение нескольких задач одновременно, как будто вы можете петь и купаться вместе. Теперь вы выполняете задачу в параллельном режиме.
Асинхронность - это то, что связано с выполнением потока в асинхронной модели, когда выполняется одна задача, вы можете переключиться на другую задачу, не дожидаясь завершения предыдущей.
Асинхронное программирование помогает нам добиться параллелизма. Асинхронное программирование в многопоточной среде - это способ добиться параллелизма.
У каждого возникают проблемы с сопоставлением асинхронного параллелизма или параллелизма, поскольку асинхронный не является антонимом параллельного или параллельного. Это антоним Синхронного. Который просто указывает, будет ли что-то, в этом случае потоки, синхронизироваться с чем-то другим, в этом случае с другим потоком.
Я собираюсь сделать краткий и интересный обзор этих концепций.
Параллельный или параллельный - способы выполнения задач.
Возьмем пример из реальной жизни: есть задача, которая требует, чтобы вы съели целый огромный торт и спели целую песню. Вы выиграете, если будете самым быстрым, спевшим всю песню и допившим торт. Итак, правило состоит в том, что вы поете и едите одновременно. Как вы это делаете, не входит в правила. Вы можете съесть весь торт, а затем спеть всю песню или вы можете съесть половину торта, затем спеть половину песни, затем повторить это снова и т. Д.
Параллелизм - это особый вид параллелизма, при котором задачи действительно выполняются одновременно. В информатике параллелизм может быть достигнут только в многоядерных средах.
Синхронный и асинхронный - модели программирования.
Синхронно вы пишете код в виде шагов, которые выполняются по порядку сверху вниз. В модели асинхронного программирования вы пишете код в виде задач, которые затем выполняются одновременно. Одновременное выполнение означает, что все задачи, скорее всего, будут выполняться одновременно.
"Синхронизация и асинхронность - это модели программирования. Параллельный и параллельный способы выполнения задач...". Источник: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66
Другими словами, синхронизация и асинхронность описывают, как ваша программа выполняется при вызове функции (будет ли она ждать или продолжит выполнение?), В то время как параллельный и параллельный описывают, как функция (задача) будет выполняться (одновременно = возможно, выполняется в в то же время, parallel = эффективно выполняется одновременно).
совпадение
Параллельность означает, что приложение выполняет работу над несколькими задачами одновременно (одновременно). Хорошо, если на компьютере установлен только один ЦП, приложение может не выполнять одновременно несколько задач одновременно, но внутри приложения одновременно обрабатывается более одной задачи. Он не полностью завершает одну задачу, прежде чем начинает следующую.
параллелизм
Параллелизм означает, что приложение разбивает свои задачи на более мелкие подзадачи, которые могут обрабатываться параллельно, например, на нескольких процессорах одновременно.
Параллелизм и параллелизм в деталях
Как видите, параллелизм связан с тем, как приложение обрабатывает несколько задач, над которыми оно работает. Приложение может обрабатывать одну задачу за раз (последовательно) или работать над несколькими задачами одновременно (одновременно).
Параллелизм, с другой стороны, связан с тем, как приложение обрабатывает каждую отдельную задачу. Приложение может обрабатывать задачу последовательно от начала до конца или разбить задачу на подзадачи, которые могут выполняться параллельно.
Как видите, приложение может быть параллельным, но не параллельным. Это означает, что он обрабатывает более одной задачи одновременно, но задачи не разбиты на подзадачи.
Приложение также может быть параллельным, но не параллельным. Это означает, что приложение работает только с одной задачей за раз, и эта задача разбита на подзадачи, которые могут обрабатываться параллельно.
Кроме того, приложение не может быть ни параллельным, ни параллельным. Это означает, что он работает только с одной задачей за раз, и задача никогда не разбивается на подзадачи для параллельного выполнения.
Наконец, приложение также может быть как параллельным, так и параллельным, поскольку оно одновременно работает над несколькими задачами и разбивает каждую задачу на подзадачи для параллельного выполнения. Однако некоторые преимущества параллелизма и параллелизма могут быть потеряны в этом сценарии, так как процессоры в компьютере уже достаточно заняты только параллелизмом или параллелизмом. Сочетание этого может привести только к небольшому приросту производительности или даже к потере производительности. Убедитесь, что вы анализируете и измеряете, прежде чем принять параллельную параллельную модель вслепую.
С http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
Здесь есть немного семантики, чтобы прояснить это:
Параллелизм или параллелизм - это вопрос конкуренции за ресурсы, тогда как асинхронный - это поток управления.
Различные процедуры (или составляющие их операции) называются асинхронными, когда нет детерминированной реализации порядка их обработки; другими словами, существует вероятность того, что любой из них может быть обработан в любой момент времени T. По определению, несколько процессоров (например, CPU или Persons) позволяют обрабатывать несколько из них одновременно; на одном процессоре их обработка чередуется (например, потоки).
Асинхронные процедуры или операции называются параллельными, когда они совместно используют ресурсы; Параллелизм - это определенная возможность конкуренции в любой момент времени. Параллелизм тривиально гарантирован, когда нет общих ресурсов (например, другой процессор и хранилище); в противном случае контроль параллелизма должен быть решен.
Следовательно, асинхронная процедура или операция может обрабатываться параллельно или одновременно с другими.
Здесь я объясню с некоторыми примерами
совпадение
Веб-сервис получает много небольших запросов в режиме реального времени, и он должен обрабатывать каждый из этих запросов по-разному, а также независимо от других запросов.
- многие задачи выполнены
- в режиме реального времени
с разными последовательностями выполнения (может быть несколько задач или одна задача может выполняться по-разному в каждом вызове)
существенно сокращает время отклика
параллелизм
Графический процессор использует параллельную обработку для обработки одного и того же блока кода (ядра AKA) в тысячах физических и логических потоков. Каждый вызов ядра иногда использует отдельный блок памяти для своих операций чтения / записи. В идеале процесс начинается и заканчивается для всех потоков одновременно. Одно ядро ЦП без гиперпоточности не может выполнять параллельную обработку.
- одно ядро выполняется на нескольких процессорах
- одновременно
- с единственной последовательностью выполнения (есть одно ядро, в котором ветвление или, если его избегают)
- существенно увеличивает скорость
Асинхронный
Один тяжелый процесс (например, операция ввода-вывода) может легко заблокировать графический интерфейс, если он запущен в потоке графического интерфейса. Чтобы гарантировать отзывчивость пользовательского интерфейса, тяжелый процесс может выполняться асинхронно. Лучше запускать подобные асинхронные операции по одной. например, несколько операций ввода-вывода могут быть значительно медленнее, если они выполняются одновременно, поэтому лучше поставить их в очередь до конца
- одна задача или пакет задач выполняется в другом потоке
- единовременно или по одному
- последовательность выполнения не имеет значения / применяется, потому что нет параллелизма
- существенно снижает скорость, но обеспечивает отзывчивость к другому потоку
Примечание: асинхронная операция, которая выполняется одновременно (т.е. более одного раза за раз), является одновременной операцией.
Параллельный: это широкий термин, который означает, что два фрагмента кода выполняют это "одновременно" до такой степени, что параллельное выполнение становится "реальным". Звучит расплывчато и упрощенно? Да. Я пытаюсь помочь вам сосредоточиться на различиях между этими концепциями, а не на каждом отдельном техническом определении.
Поэтому я написал "реальный", потому что параллелизм можно смоделировать в определенной степени. Многие системы, например игры, реализуют "параллельные" подсистемы, которые выполняют много задач во время каждого цикла выполнения (например: некоторые из них широко используют агенты), но в большинстве случаев они только параллельны в том смысле, что они каждый делает свою маленькую вещь в непредсказуемом порядке, обращаясь к данным на первый взгляд случайным образом, и даже если вы реализовали какую-то примитивную программную многозадачность для организации всей этой задачи, она все еще не совсем параллельна. Это просто очень сложная последовательная система.
Можно сказать, что параллелизм становится реальным, когда существует сторонняя система (будь то базовая упреждающая ОС, предлагающая потоки или ядра ЦП), специально предназначенная для запуска кода в черных ящиках, которые вы не можете контролировать (за исключением времени, когда они начало и результат, который они дают, плюс любой мьютекс или семафоры, которые вы можете добавить)
Одновременность: не может быть параллелизма без параллелизма (будь то симулированный или реальный, как я объяснил выше), но этот термин специально фокусируется на том факте, что две системы будут пытаться получить доступ кодному и тому же ресурсу одновременно в какой-то момент. Это подчеркивает тот факт, что вам придется иметь дело с этим.
Асинхронный: все правы, говоря, что асинхронный не связан с параллелизмом, но он прокладывает путь к нему (бремя лежит на том, чтобы сделать вещи параллельными или нет - продолжайте читать).
Вы можете увидеть эту концепцию как способ представления параллелизма путем формализации трех основных вещей, обычно используемых в параллелизме: 1) определить инициализацию задачи (скажем, когда она начинается и какие параметры она получает), 2) что нужно сделать после ее завершения и 3) Что код должен продолжать делать между ними.
Но это все еще только синтаксис (обычно он представляется как методы обратного вызова). За кулисами базовая система может просто решить, что эти так называемые "задачи" - это просто фрагменты кода, которые накапливаются до тех пор, пока не завершит код, который в настоящее время выполняется. И затем он складывает их один за другим и выполняет их последовательно. Или нет. Это может также создать поток для каждой задачи и запустить их параллельно. Какая разница? Эта часть не входит в понятие;)
Объясняя эти термины аналогией.
Ваш дом нуждается в вымытой посуде и стирке.
Параллелизм: вам не нужно ждать завершения одного перед запуском другого. Например, вы можете начать приготовление блюда в первую очередь или одновременно начать оба блюда. Они могут закончиться в любом порядке, т.е. даже если вы начали мыть посуду первым, может быть, стирка будет выполнена раньше.
Параллелизм: у вас в доме более одного человека, выполняющего работу; Например, вы можете работать с посудой, а другой человек может стирать.
Асинхронный: вы говорите кому-то постирать, а кому-то вымыть посуду. На самом деле это может быть один и тот же человек (т. Е. Вы говорите им постирать, а также сразу же мыть посуду). Они сообщают вам, когда они закончат работу с каждым из них.
Синхронно: вы говорите кому-нибудь помыть посуду. Вы их ждете. Когда они будут выполнены, вы можете сделать что-то еще (вы можете сказать им, чтобы они постирали следующей, или вы можете сделать это самостоятельно, или вы можете сделать что-то совершенно другое; дело в том, что вы заблокированы на завершении первого задания, вы синхронизированы с ними).
Обобщить
параллельный , когда кажется, что несколько вещей происходят одновременно (с возможностью быстрого переключения между параллельными задачами; они параллельны, потому что каждой задаче требуется часть ресурса, ЦП и т. д.)
параллельно , когда несколько вещей действительно происходят одновременно (количество выполняемых потоков тесно связано с количеством исполняемых ядер)
асинхронный — это просто неблокирующий , когда вещи, которых мы должны ждать, не заставляют нас ждать (требуется какой-то механизм уведомления, чтобы продолжить с того места, где мы остановились)
Я даю сценарий реального мира, чтобы объяснить 3 темы. Допустим, вы хотите поехать из Ахмедабада в Мумбаи, но не знаете, как это сделать, поэтому вы решили воспользоваться помощью картографического приложения (Google Maps).
очень нормальный, но неэффективный способ - вы можете просмотреть полный путь перед тем, как завести машину, а затем начать движение и добраться до места назначения.
- Параллельно - вы можете вести машину и постоянно наблюдать за траекторией.
- Асинхронный - ваш друг в машине с вами, вы дали ему свой мобильный телефон с открытым приложением карты и сказали ему посмотреть карту и направить вас.
- Параллельно - вы проезжаете несколько километров, припаркуете машину на обочине и смотрите карту, прокладываете маршруты, снова начинаете движение и так далее.
Параллелизм против параллелизма: одновременность в один момент времени может быть выполнена только одна задача. Пример: параллельность процессора с одним процессором, в одной точке мы можем выполнять несколько задач. пример: двухъядерный или многоядерный процессор
Параллелизм бывает, когда у менеджера есть несколько работников, и каждому из них он может дать отдельную задачу. Рабочие выполняют свою работу и предоставляют менеджеру результаты. Если задачи не могут быть полностью разделены, например, имеют некоторую зависимость результатов друг от друга или нуждаются в выделении одного и того же ресурса без других выводов, степень параллелизма связана с такими ограничениями и не может быть полностью достигнута.
Параллелизм происходит, когда у менеджера есть несколько задач, но меньше рабочих, поэтому некоторым работникам дается более одной задачи. Любой работник, получивший несколько задач, делит каждую исходную заданную задачу на несколько шагов и выполняет шаги, чередующиеся, результат каждой задачи будет возвращен менеджеру, как только все шаги будут завершены. Менеджер получает результат задачи, в то время как другие задачи запущены и прошли несколько шагов, но еще не завершены. Если какой-либо рабочий с несколькими задачами решает не начинать ни одного шага данной задачи до завершения всех шагов уже запущенной задачи, это называется последовательностью.
Асинхронность — это любое из двух вышеперечисленных, смешанное или разделенное с точки зрения менеджера. Когда менеджер назначает задачи либо нескольким, либо достаточному количеству работников, он не должен ждать, пока не будут возвращены какие-либо результаты. Он может заниматься своими личными делами или чем-то еще, пока дела идут. Обычно работники не решают, как задачи должны быть разбиты на этапы. Инверсия управления означает, что менеджер принимает решения по шагам и дает работникам отдельные шаги. Так что, когда он получает результат шага от работника, дайте ему еще один шаг, может быть, из другой задачи. Тот, кто находится под контролем, также отвечает за объединение результатов шага назад в результаты задачи. Таким образом, асинхронность предполагает ответственность за контроль и, возможно, за координацию. Если какой-либо работник вынужден работать последовательно, с точки зрения менеджера он синхронный работник.
Резюме Как несложно догадаться, полный параллелизм — неосуществимая идея, разве что в редких, в основном тривиальных, случаях. Поскольку реальность связана с взаимозависимыми задачами, общими ресурсами и нехваткой работников. Так что параллелизм — это реальность. С точки зрения менеджера такой параллелизм лучше всего, если он не мешает ему хорошо контролировать задачи, и если он положительный, то называется асинхронным. Кроме того, лучшие практики разработки компьютерного программного обеспечения, дополненные принципом S в SOLID , исторически делали серверы одношаговыми бегунами, называемыми микросервисами, что возвращало контроль клиентам. Итак, текущая ситуация - параллелизмс точки зрения сервера и асинхронности с точки зрения клиента.
Я пытаюсь ответить в контексте программирования на C#.
Параллелизм: Параллелизм — это концепция программирования, при которой программист может разделить программу на независимые части (потоки) и выполнять их независимо от порядка или в частичном порядке, не влияя на результат. На практике мы достигаем этого с помощью многопоточности. На одноядерном процессоре задачи (потоки) выполняются методом чередования. Это означает, что одно и то же ядро переключается с одного потока на другой. Таким образом, одновременно выполняется только один поток. На многоядерном процессоре задачи (потоки) выполняются как «параллельный + параллельный метод», поскольку существует возможность одновременного выполнения двух или более задач (потоков) на разных ядрах.
Параллелизм Параллелизм — это способность программы выполнять несколько задач одновременно, обычно используя несколько процессоров или вычислительных ядер. Как упоминалось выше, его можно комбинировать с параллелизмом.
Асинхронность Асинхронность — это метод программирования, при котором вы выполняете неблочные операции ввода-вывода. То есть задача (поток) удерживается до тех пор, пока вы не получите ответ от ресурса (базы данных или сетевого запроса); но потоку не нужно ждать завершения задачи. Он может выполнить какую-то другую задачу (поток).
Примечание. Здесь термин «задача» не следует путать с «задачами» в TPL (параллельная библиотека задач).
Concurrent + Parallel означает одновременное выполнение нескольких задач. Я вижу, что некоторые предполагают, что есть различие, но оно варьируется в зависимости от того, к какой ссылке вы обращаетесь, и нет действительно правильного или неправильного ответа.
Асинхронный : в некоторых сообществах это означает неблокирующий код, что может означать две вещи: Это почти всегда означает, что он не будет блокировать поток ОС. Однако неблокирующий может дополнительно означать, что следующая строка исходного кода в функции будет продолжать выполняться без задержки. В Питонеawait asyncio.sleep(5)
блокирует выполнение функции, но не потока ОС, и это считается асинхронным. В Golang у вас есть «горутины», которые, как и await в Python, блокируют выполнение кода, но не потоков ОС, однако в сообществе Golang это не называется асинхронным. Это просто параллельное программирование.