В чем разница между concurrency, parallelism и асинхронными методами?

Concurrency имеет две задачи, выполняемые параллельно в отдельных потоках. Однако асинхронные методы выполняются параллельно, но на одном и том же потоке. Как это достигается? Кроме того, как насчет parallelism?

В чем разница между этими тремя понятиями?

Ответ 1

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

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

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

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


РЕДАКТИРОВАТЬ

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

Ответ 2

Вкратце,

Concurrency означает несколько задач, которые запускаются, запускаются и завершаются в перекрывающиеся периоды времени, в определенном порядке. Parallelism - это когда несколько задач или несколько частей уникальной задачи буквально запускаются в одно и то же время, например. на многоядерном процессоре.

Помните, что Concurrency и Parallelism НЕ ТОЛЬКО.

Различия между Concurrency и parallelism

Теперь перечислим замечательные отличия между Concurrency и parallelism.

Concurrency - это когда две задачи могут запускаться, запускаться и выполняться в перекрывающиеся периоды времени. Parallelism - это когда задачи буквально запускаются одновременно, например. на многоядерном процессоре.

Concurrency представляет собой состав независимо исполняемых процессов, а Parallelism - одновременное выполнение (возможно связанных) вычислений.

Concurrency - это дело с множеством вещей одновременно. Parallelism заключается в том, чтобы делать много вещей сразу.

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

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

Приложение не может быть ни параллельным, ни параллельным, что означает, что он обрабатывает все задачи по одному, последовательно.

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

Concurrency

Concurrency по существу применим, когда мы говорим о минимальных двух задач или более. Когда приложение способно выполнять две задачи практически одновременно мы называем это одновременным приложением. Хотя здесь выполнение задач выглядит одновременно, но по существу они НЕ МОГУТ. Они используют преимущества функции масштабирования процессора в операционной системе где каждая задача выполняет часть своей задачи, а затем переходит в состояние ожидания. Когда первая задача находится в состоянии ожидания, CPU назначается второй задаче для выполните свою часть задачи.

Операционная система на основе приоритета задач, таким образом, назначает ЦП и другие вычислительные ресурсы, например. Память; по очереди поворачивать ко всем задачам и дать им шанс завершить. Для конечного пользователя кажется, что все задачи параллельно. Это называется concurrency.

Parallelism

Parallelism не требует двух задач. Это буквально физически запускать части задач или несколько задач, в то же время используя многоядерную инфраструктуру ЦП, путем назначения одного ядра каждому задачи или подзадачи.

Parallelism требуется оборудование с несколькими процессорами, по существу. В одноядерном процессоре вы можете получить Concurrency, но НЕ parallelism.

Асинхронные методы

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

Ответ 3

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

Параллелизм - это когда некоторые задачи фактически выполняются параллельно.

enter image description here


Асинхронность - это отдельная концепция (хотя и связана с некоторыми контекстами). Это относится к тому факту, что одно событие может происходить в другое время (не синхронно) с другим событием. На приведенных ниже диаграммах показана разница между синхронным и асинхронным выполнением, когда участники могут соответствовать различным потокам, процессам или даже серверам.

enter image description here

enter image description here

Ответ 4

У всех возникают проблемы с привязкой асинхронного значения к parallelism или concurrency, потому что асинхронный не является антонимом как параллельного, так и параллельного. Это антоним синхронного. Это просто указывает, будет ли что-то в этом случае потоками синхронизироваться с чем-то другим, в этом случае другой поток.

Ответ 5

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

Параметр: Задачи запускаются одновременно.

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

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

Пожалуйста, не стесняйтесь улучшать или исправлять ответ.

Ответ 6

совпадение

Параллельность означает, что приложение выполняет работу над несколькими задачами одновременно (одновременно). Хорошо, если на компьютере только один ЦП, приложение может не выполнять одновременно более одной задачи, но внутри приложения одновременно обрабатывается более одной задачи. Он не полностью завершает одну задачу, прежде чем начинает следующую.

параллелизм

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

Параллелизм и параллелизм в деталях

Как видите, параллелизм связан с тем, как приложение обрабатывает несколько задач, над которыми оно работает. Приложение может обрабатывать одну задачу за раз (последовательно) или работать над несколькими задачами одновременно (одновременно).

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

Как видите, приложение может быть параллельным, но не параллельным. Это означает, что он обрабатывает более одной задачи одновременно, но задачи не разбиты на подзадачи.

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

Кроме того, приложение не может быть ни параллельным, ни параллельным. Это означает, что он работает только с одной задачей за раз, и задача никогда не разбивается на подзадачи для параллельного выполнения.

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

С http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html

Ответ 7

CONCURRENCY VS PARALLELISM: concurrency в один момент времени может быть выполнена только одна задача. пример: процессор с одним процессором parallelism в какой-то момент мы можем выполнять несколько задач. пример: двухъядерный или многоядерный процессор

Ответ 8

Параллель: это широкий термин, означающий, что две части кода выполняют "в то же время" до точки, где параллельное выполнение становится "реальным". Звучит неопределенно и просто? Да. Я пытаюсь помочь вам сосредоточиться на различиях между этими концепциями, а не в предоставлении каждого отдельного технического определения.

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

Вы можете сказать, что параллелизм становится реальным, когда существует сторонняя система (будь то базовая превентивная ОС, предлагающая потоки или ядра ЦП), специально предназначенные для запуска кода в черных ящиках, которые вы не можете контролировать (за исключением того времени, когда они start и результат, который они создают, плюс любые мьютексы или семафоры, которые вы могли бы добавить)

Параллельно: не может быть параллелизма без параллелизма (будь то симуляция или реальность, как я объяснял выше), но этот термин в основном посвящен тому факту, что обе системы будут пытаться одновременно получить доступ к одному и тому же ресурсу. Он делает акцент на том факте, что вам придется иметь дело с этим.

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

Вы можете увидеть это понятие как способ представления параллелизма путем формализации трех основных вещей, обычно участвующих в параллелизме: 1) определить инициализацию задачи (скажем, когда она начнется и какие параметры она получит), 2) что должно быть сделано после ее завершения и 3) Что код должен продолжать делать inbetween.

Но это еще только синтаксис (обычно он представлен как методы обратного вызова). За сценой базовая система может просто решить, что эти так называемые "задачи" - это всего лишь фрагменты кода, которые накапливаются до тех пор, пока он не завершит исполняемый код. И затем он распаковывает их один за другим и выполняет их последовательно. Или нет. Он также может создавать поток для каждой задачи и запускать их параллельно. Какая разница? Эта часть не включена в концепцию;)

Ответ 9

Здесь я объясню несколько примеров

совпадение

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

  • выполняется множество задач
  • в настоящее время
  • с различными последовательностями выполнения (может быть несколько задач или одна задача может выполняться по-разному в каждом вызове)

  • существенно сокращает время отклика

параллелизм

Графический процессор использует параллельную обработку для обработки одного и того же блока кода (ядро AKA) на тысячах физических и логических потоков. Каждый вызов ядра иногда использует другой блок памяти для операций чтения/записи. В идеале, процесс начинается и заканчивается для всех потоков одновременно. Одно процессорное ядро без гиперпотока не может выполнять параллельную обработку.

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

Асинхронный

Один тяжелый процесс (например, операция ввода-вывода) может легко блокировать графический интерфейс, если он работает в потоке графического интерфейса. Чтобы гарантировать отзывчивость пользовательского интерфейса, тяжелый процесс может выполняться асинхронно. Лучше запускать аналогичные асинхронные операции по одному за раз. например, несколько операций с привязкой к IO могут быть значительно медленнее, если они запускаются одновременно, поэтому лучше поставить их в очередь, чтобы начать

  • одна задача или пакет задач выполняется в другом потоке
  • одноразовое или одноразовое
  • последовательность выполнения не имеет значения/применяется, поскольку нет параллелизма
  • существенно снижает скорость, но обеспечивает отзывчивость к другой теме

Примечание. Асинхронная операция, выполняемая одновременно (т.е. более одного раза за раз), является параллельной операцией.

Ответ 10

Существует несколько сценариев, в которых может происходить параллелизм:

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

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

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