Concurrency vs Parallelism - В чем разница?

Concurrency vs Parallelism - В чем разница? Любые примеры

662
задан StackUnderflow 26 июня '09 в 20:18
источник поделиться
27 ответов

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

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

Цитата Многопоточное руководство по программированию Sun:

  • Concurrency: Условие, которое существует, когда происходит как минимум два потока. Более обобщенная форма parallelism, которая может включать временную разбивку как форму виртуального parallelism.

  • Parallelism: Условие, возникающее при одновременном выполнении как минимум двух потоков.

810
ответ дан RichieHindle 26 июня '09 в 20:24
источник поделиться

Мне нравится разговор Роб Пайка: Concurrency не Parallelism (это лучше!) (слайды) (говорить)

Роб обычно говорит о Go и обычно обращается к вопросу о Concurrency vs Parallelism в визуальном и интуитивном объяснении! Вот краткое резюме:

Задача: Позвольте записать кучу устаревших языковых руководств! По одному за раз!

Task

Concurrency: Существует много одновременных разложений задачи! Один пример:

Gophers

Parallelism: Предыдущая конфигурация происходит параллельно, если в это время работает не менее 2 сусликов.

202
ответ дан asfer 20 авг. '12 в 11:52
источник поделиться

Путаница существует, потому что словарные значения обоих этих слов почти одинаковы:

  • Параллельный: существующий, происходящий или выполняемый одновременно (dictionary.com)
  • Параллельно: очень похожее и часто происходит в одно и то же время (веб-сайт merriam).

Однако то, как они используются в информатике и программировании, совершенно иное. Вот моя интерпретация:

  • Concurrency: Прерывание
  • Parallelism: независимость

Итак, что я имею в виду под определениями? Я уточню с помощью реальной аналогии. Скажем, вам нужно сделать 2 очень важных задания за один день.

  • Получить паспорт
  • Получить презентацию

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

Случай-1: последовательное выполнение Обычно вы едете в паспортный стол в течение 2 часов, ждете в очереди в течение 4 часов, выполняете задание, возвращаетесь на два часа, отправляетесь домой, проведите еще 5 часов и сделайте презентацию.

Случай-2: одновременное выполнение: Но ты умный. Вы планируете заранее. Что вы делаете, вы носите с собой ноутбук, и, ожидая в очереди, вы начинаете работать над своей презентацией. Таким образом, как только вы вернетесь домой, вам нужно будет работать еще один час вместо 5 часов. В этом случае обе задачи выполняются вами, просто на куски. Вы прервали задачу паспорта, ожидая в очереди и работая над презентацией. Если ваш номер был вызван, вы прервали презентационную задачу и переключились на паспортную задачу. Экономия во времени была по существу возможной из-за прерывания обеих задач. Concurrency, IMO, следует рассматривать как "изоляцию" в свойствах ACID базы данных. Две транзакции базы данных удовлетворяют требованиям изоляции, если вы выполняете суб-транзакции в каждом из чередующихся чередований, и конечный результат такой же, как если бы две задачи были сделать серийно. Помните, что для задач паспорта и презентации вы являетесь единственным палачом.

Случай-3: параллельное выполнение Теперь, когда вы такой умный парень, очевидно, вы выше, и у вас есть помощник. Теперь, прежде чем вы отправитесь на паспортное задание, позвоните ему и попросите его подготовить первый проект презентации. Вы проводите весь свой день и завершаете задачу паспорта, возвращаетесь и видите свои письма, и вы найдете проект презентации. Он проделал довольно солидную работу и с некоторыми исправлениями еще через два часа, вы ее доработали. Теперь, когда ваш помощник так же умен, как и вы, он смог самостоятельно работать над ним, не требуя постоянных разъяснений. Таким образом, из-за независимости задач они выполнялись одновременно двумя разными палачами.

Еще со мной? Хорошо..

Случай-4: параллельный, но не параллельный Помните о своей задаче на паспорт, где вам нужно ждать в очереди? В этом случае обратите внимание, что, поскольку это ваш паспорт, ваш помощник не может ждать в строке для вас. Таким образом, задачи паспорта имеют прерывистость (вы можете остановить его, ожидая в строке и возобновить его позже, когда вы назовете номер), но нет никакой способности к независимости (ваш помощник не может ждать на вашем месте).

Случай-5: параллельный, но не параллельный Скажем, у правительственного учреждения есть проверка безопасности, чтобы войти в помещение. Здесь вам нужно снять все электронные устройства и отправить их офицерам, которых вы только вернетесь после завершения своей задачи. В этом случае задача паспорта не является ни независимой, ни прерываемой. Даже если вы ждете в очереди, вы не можете работать над чем-то другим, потому что у вас нет необходимого оборудования. Точно так же, скажем, презентация настолько математична по своей природе, что вам требуется 100% концентрация в течение как минимум 5 часов. Вы не можете сделать это, ожидая очереди в паспортной задаче, даже если у вас есть ноутбук. В этом случае задача представления независима (либо вы, либо ваш помощник можете наложить 5 часов целенаправленного усилия), но не прерывать.

Случай-6: параллельное и параллельное выполнениеТеперь скажите, что помимо назначения помощника презентации вы также несете ноутбук с собой в паспортную задачу. В ожидании в строке вы видите, что помощник создал первые 10 слайдов в общей колоде. Вы отправляете ему комментарии, исправляя его. Таким образом, теперь, когда вы возвращаетесь домой, вместо того, чтобы инвестировать 2 часа для завершения проекта, вам просто нужно 15 минут. Это было возможно, потому что задача презентации обладает независимостью (любой из них может это сделать) и прерыванием (вы можете остановить ее и возобновить ее позже). Таким образом, вы одновременно выполняете задачу и выполняете только задачу представления параллельно.

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

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

Назад к информатике: В вычислительном мире один из них часто видит case-1, например обработку прерываний.

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

Случай-3 часто встречается, когда мы говорим о картах-сокращениях или кластерах hasoop.

Я думаю, что случай-4 редок, редко бывает, что задача параллельна, но не параллельна. Но это может произойти из-за того, что ваша задача требует доступа к специальному вычислительному чипу, к которому можно получить доступ только через процессор-1. Таким образом, даже если процессор-2 свободен, а процессор-1 выполняет какую-то другую задачу, специальная задача вычисления не может продолжаться на процессоре-2.

Случай-5 также редок, но не так редок, как случай-4. Неконкурентный код может быть критическим регионом, защищенным мьютексами. После его запуска он должен полностью выполнить. Однако два разных критических региона могут одновременно работать на двух разных процессорах.

Случай-6: IMO, в большинстве случаев, когда мы говорим о параллельном или параллельном программировании, мы в основном говорим об этом последнем случае -6 из сочетания и соответствия как параллельных, так и параллельных исполнений.

Concurrency и Go: Если вы поймете, почему Роб Пайк говорит, что concurrency лучше, вы должны понять, что причина в том, что у вас действительно длинная задача, в которой есть несколько периодов ожидания, в которых вы ожидаете некоторых внешних операций, таких как чтение файла, загрузка сети. В своей лекции все, что он говорит, это просто разбить эту длинную последовательную задачу, чтобы вы могли сделать что-то полезное, пока вы ждете. Вот почему он рассказывает о разных организациях с разными сусликами. Теперь сила Go происходит от того, чтобы сделать это нарушение очень простым с помощью "go" ключевого слова и каналов. Также есть отличная базовая поддержка во время выполнения, чтобы запланировать эти goroutines.

Но, по существу, лучше concurrency, чтобы parallelism?

Являются ли яблоки предпочтительнее, чем апельсины?

184
ответ дан Methos 10 июля '14 в 21:44
источник поделиться

Чтобы добавить к тому, что сказали другие:

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

104
ответ дан Thomas T 05 нояб. '12 в 9:21
источник поделиться

Скажем, у вас есть программа с двумя потоками. Программа может работать двумя способами:

Concurrency                 Concurrency + parallelism
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

В обоих случаях мы имеем concurrency из того факта, что мы имеем более одного потока.

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

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

56
ответ дан Pithikos 10 июня '15 в 18:39
источник поделиться

Concurrency: Если две или более проблемы решаются одним процессором. alt text

Parallelism: Если одна проблема решена несколькими процессорами.

alt text

31
ответ дан Rajendra Uppal 14 нояб. '10 в 10:12
источник поделиться

Я попытаюсь объяснить интересным и понятным примером.:)

Предположите, что организация организует шахматный турнир, в котором 10 игроков (с равными навыками игры в шахматы) бросят вызов шахматисту профессионального чемпиона. И так как шахматы - игра 1:1, таким образом, организаторы должны провести 10 игр в эффективном режиме, чтобы они могли закончить все событие как можно быстрее.

Надеюсь, следующие сценарии легко описывают несколько способов проведения этих 10 игр:

1) SERIAL. Позволяет сказать, что профессиональные игры с каждым человеком один за другим начинают и заканчивают игру одним человеком, а затем запускают следующую игру со следующим человеком и так далее. Другими словами, они решили проводить игры последовательно. Так что если одна игра займет 10 минут, то 10 игр пройдут 100 минут, также предположите, что переход от одной игры к другой займет 6 секунд, а затем для 10 игр это будет 54 секунды (около 1 минуты).

поэтому все событие будет приблизительно завершено за 101 минуту (WORST APPROACH)

2) CONCURRENT - скажет, что профессионал играет свою очередь и переходит к следующему игроку, поэтому все 10 игроков играют одновременно, но у профессионального игрока нет двух человек за раз, он играет поворачивается и переходит к следующему человеку. Теперь предположим, что профессиональный игрок занимает 6 секунд, чтобы сыграть свою очередь, а также время перехода профессионального игрока. Два игрока составляют 6 секунд, поэтому общее время перехода для первого игрока будет 1мин (10x6 секунд). Поэтому, к тому времени, когда он вернулся к первому человеку, с кем было запущено событие, прошло 2 миллиона (10xtime_per_turn_by_champion + 10xtransition_time = 2mins)

Предполагая, что все игроки берут 45 секунд, чтобы завершить свой ход, поэтому на основе 10 минут на игру от события SERIAL нет. раундов до окончания игры должно быть 600/(45 + 6) = 11 раундов (приблизительно)

Итак, все событие будет приблизительно завершено в 11xtime_per_turn_by_player_ & _champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20,35 минут (приблизительно)

СМОТРИТЕ УЛУЧШЕНИЕ от 101 мин до 20,35 мин (ЛУЧШИЙ ПОДХОД)

3) PARALLEL - позволяет организаторам получить дополнительные средства и, таким образом, решил пригласить двух профессиональных чемпионов (оба одинаково способных) и разделил набор из 10 игроков (претендентов) в две группы по 5 человек и назначили их двум чемпионам, т.е. по одной группе. Теперь это происходит параллельно в этих двух наборах, т.е. По меньшей мере два игрока (по одному в каждой группе) играют против двух профессиональных игроков в своей группе.

Однако в группе профессиональный игрок с одним игроком за раз (т.е. последовательно), поэтому без каких-либо вычислений вы можете легко вывести, что все событие будет приблизительно завершено в 101/2 = 50,5 млн. для завершения

СМОТРИТЕ УЛУЧШЕНИЕ от 101 мин до 50,5 мин (ХОРОШИЙ ПОДХОД)

4) CONCURRENT + PARALLEL. В приведенном выше сценарии давайте скажем, что второй чемпион-игрок будет играть одновременно (прочитайте 2-й пункт) с 5 игроками в своих соответствующих группах, так что теперь игры по группам работают параллельно, но внутри группы они работают одновременно.

Итак, игры в одной группе будут примерно завершены в 11xtime_per_turn_by_player_ & _champion + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sec = 15.5mins (приблизительно)

Таким образом, все событие (включающее две такие параллельные группы) будет приблизительно завершено в 15.5mins

СМОТРИТЕ УЛУЧШЕНИЕ от 101 мин до 15,5 мин (ЛУЧШИЙ ПОДХОД)

ПРИМЕЧАНИЕ: в приведенном выше сценарии, если вы замените 10 игроков на 10 похожих заданий и двух профессиональных игроков с двумя ядрами ЦП, тогда следующий порядок останется верным:

SERIAL > PARALLEL > CONCURRENT > CONCURRENT + PARALLEL

(ПРИМЕЧАНИЕ: этот порядок может измениться для других сценариев, так как это упорядочение сильно зависит от взаимозависимости заданий, для связи требуются черно-белые задания и задания накладных расходов на перекладку)

23
ответ дан sactiw 22 апр. '15 в 14:24
источник поделиться

concurency: несколько потоков выполнения с возможностью совместного использования ресурсов

Пример: два потока, конкурирующих за порт ввода-вывода.

paralelism: разбивая проблему в нескольких похожих кусках.

Пример: разбор большого файла путем запуска двух процессов на каждую половину файла.

23
ответ дан Mihai Toader 26 июня '09 в 20:23
источник поделиться

Они решают разные проблемы. Concurrency решает проблему нехватки ресурсов ЦП и многих задач. Таким образом, вы создаете потоки или независимые пути выполнения кода, чтобы разделить время на ограниченном ресурсе. До недавнего времени Concurrency доминировал в обсуждении из-за доступности процессора.

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

20
ответ дан JP Alioto 26 июня '09 в 20:36
источник поделиться

Простой пример:

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

Параллель: "Две очереди и две банкоматов"

19
ответ дан Saurabh Pakhare 28 янв. '15 в 6:29
источник поделиться

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

1 сервер, 1 очередь заданий (с 5 заданиями) → no concurrency, no parallelism (Выполняется только одно задание для завершения, следующее задание в очереди должно дождаться завершения служебного задания и нет другого сервера для его обслуживания)

1 сервер, 2 или более разных очередей (с 5 заданиями в очереди) → concurrency (поскольку сервер использует время со всеми 1-м заданием в очередях, одинаково или взвешенно), по-прежнему нет parallelism, поскольку на любом мгновенно, есть одна и только работа, обслуживаемая.

2 или более серверов, одна очередь → parallelism (2 задания выполняются в одно и то же время), но нет concurrency (сервер не использует время, третье задание должно ждать завершения одного из серверов).

2 или более серверов, 2 или более разных очереди → concurrency и parallelism

Другими словами, concurrency использует время для завершения задания, он МОЖЕТ заняться тем же временем, чтобы завершить свою работу, но, по крайней мере, он начнется рано. Важно то, что задания можно нарезать на более мелкие задания, что позволяет перемежать.

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

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

8
ответ дан Rahul 11 сент. '13 в 0:03
источник поделиться

Concurrency = > Когда несколько задач выполняются одновременно с общими ресурсами.

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

5
ответ дан MBK 24 апр. '13 в 4:29
источник поделиться

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

Теперь вы профессиональный программист. И вам нравится слушать спокойную музыку во время кодирования. Это Parallelism.

Enjoy.

5
ответ дан Ramy Mohamed 17 янв. '17 в 23:22
источник поделиться

Concurrency - обобщенная форма parallelism. Например, параллельную программу можно также назвать параллельной, но обратное не соответствует действительности.

  • Параллельное выполнение возможно на одном процессоре (несколько потоков, управляемых планировщиком или пулом потоков)

  • Параллельное выполнение невозможно на одном процессоре, но на нескольких процессорах. (Один процесс на процессор)

  • Распределенные вычисления также относятся к связанным темам, и их также можно назвать параллельными вычислениями, но обратное неверно, например parallelism.

Подробнее читайте в этой исследовательской работе Концепции параллельного программирования

4
ответ дан penguin 23 июня '15 в 20:33
источник поделиться

Я собираюсь предложить ответ, который немного конфликтует с некоторыми из популярных ответов здесь. На мой взгляд, concurrency является общим термином, который включает parallelism. concurrency применяется к любой ситуации, когда отдельные задачи или единицы работы перекрываются во времени. Parallelism применяется более конкретно к ситуациям, когда отдельные единицы работы оцениваются/выполняются в одно и то же физическое время. Разница между Parallelism ускоряет работу программного обеспечения, которое может извлечь выгоду из множества физических вычислительных ресурсов. Другим основным понятием, которое подходит под concurrency, является интерактивность. Интерактивность применяется, когда перекрытие задач можно наблюдать из внешнего мира. Разумеется, интерактивность создает программное обеспечение, которое реагирует на реальные объекты, такие как пользователи, сетевые пэры, периферийные устройства и т.д.

Parallelism, а интерактивность - почти полностью независимый размер concurrency. Для конкретного проекта разработчики могут заботиться либо обоим, либо ни тем, ни другим. Они, как правило, объединяются, не в последнюю очередь потому, что мерзость, которая является нитями, дает разумно удобный примитив, чтобы сделать то и другое.

Немного подробная информация о parallelism:

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

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

Немного подробная информация об интерактивности:

Самый простой и общий способ интерактивности - это события (т.е. цикл событий и обработчики/обратные вызовы). Для простых задач события отличные. Попытка выполнения более сложных задач с событиями попадает в стекирование (a.k.a. callback hell, инверсия управления a.k.a.). Когда вам надоели события, вы можете попробовать более экзотические вещи, такие как генераторы, сопрограммы (a.k.a. Async/Await) или совлокальные потоки.

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

Curmudgeonliness

Мне не нравится Rob Pike "concurrency не parallelism, это лучше". concurrency не лучше и не хуже parallelism. concurrency включает в себя интерактивность, которая не может сравниться с лучшими/худшими способами с parallelism. Это как сказать "поток управления лучше данных".

4
ответ дан Ben Ylvisaker 26 марта '14 в 23:33
источник поделиться

В электронике серийный и параллельный представляют собой тип статической топологии, определяющий фактическое поведение схемы. Когда нет concurrency, parallelism является детерминированным.

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

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

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

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

Это последовательный процесс, воспроизводимый в последовательной инфраструктуре.

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

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

Это последовательный процесс, воспроизводимый в параллельной инфраструктуре (хотя и частично сериализованный, хотя).

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

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

3
ответ дан s1l3n0 26 апр. '13 в 20:40
источник поделиться

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

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

3
ответ дан Sudip Bhandari 20 февр. '17 в 12:29
источник поделиться

Concurrency может запускать задачи одновременно или нет (их действительно можно запускать в отдельных процессорах/ядрах, но они также могут выполняться в "тиках" ). Важно то, что concurrency всегда ссылается на выполнение части одной большой задачи. Таким образом, в основном это часть некоторых вычислений. Вы должны быть умны о том, что вы можете делать одновременно, а что нет и как синхронизировать.

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

2
ответ дан kboom 17 янв. '17 в 20:58
источник поделиться

Параллельное программирование рассматривает операции, которые, как представляется, перекрываются, и в первую очередь касается сложности, возникающей из-за недетерминированного потока управления. Количественные затраты, связанные с параллельными программами, как правило, являются как пропускной способностью, так и задержкой. Параллельные программы часто связаны с IO, но не всегда, например. одновременные сборщики мусора полностью встроены в CPU. Педагогическим примером параллельной программы является веб-искатель. Эта программа инициирует запросы на веб-страницы и принимает ответы одновременно, поскольку результаты загрузки становятся доступными, накапливая набор страниц, которые уже были посещены. Управляющий поток не является детерминированным, поскольку ответы не обязательно принимаются в том же порядке каждый раз, когда программа запускается. Эта характеристика может очень затруднить отладку параллельных программ. Некоторые приложения принципиально параллельны, например. веб-серверы должны одновременно обрабатывать клиентские соединения. Erlang - это, пожалуй, самый перспективный язык для высококонкурентного программирования.

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

2
ответ дан Jon Harrop 15 апр. '17 в 23:09
источник поделиться

Мне действительно нравится Paul Butcher ответить на этот вопрос (он автор Seven Concurrency Модели за семь недель):

Хотя они часто путаются, parallelism и Concurrency являются разные вещи. Concurrency - это аспект проблемной области - ваш код должен обрабатывать несколько одновременных (или около одновременных) Мероприятия. Parallelism, напротив, является аспектом решения домен - вы хотите, чтобы ваша программа работала быстрее, обрабатывая различные части проблемы параллельно. Некоторые подходы применимо к concurrency, некоторым - к parallelism, а некоторым - к обоим. Поймите, с кем вы столкнулись, и выберите правильный инструмент для работа.

2
ответ дан dangom 02 нояб. '16 в 14:30
источник поделиться

Отлично, позвольте мне взять сценарий, чтобы показать, что я понимаю. предположим, что есть 3 ребенка по имени: A, B, C. A и B talk, C слушайте. Для A и B они параллельны: A: Я A. B: Я Б.

Но для C его мозг должен взять параллельный процесс для прослушивания A и B, это может быть: Я - я, а я.

2
ответ дан mannnnerd 17 февр. '14 в 5:42
источник поделиться

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

Concurrency - это дело с множеством вещей одновременно. parallelism - это делать много вещей одновременно.

1
ответ дан Suhail Gupta 24 сент. '17 в 13:25
источник поделиться

Значение щуки "concurrency" является преднамеренным решением о конструкции и реализации. Конкурентоспособная программа может иметь или не демонстрировать поведенческие "parallelism"; это зависит от среды выполнения.

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

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

0
ответ дан bgat 10 июля '15 в 17:37
источник поделиться

Из jenkov java concurrency учебники:

Термины concurrency и parallelism часто используются в отношении многопоточных программ. Но что означает concurrency и parallelism, и являются ли они теми же терминами или что?

Короткий ответ - "нет". Они не совпадают с терминами, хотя на поверхности они выглядят весьма схожими. Мне также понадобилось некоторое время, чтобы наконец найти и понять разницу между concurrency и parallelism. Поэтому я решил добавить текст в concurrency vs. parallelism к этому учебнику Java concurrency. Concurrency

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

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

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

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

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

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

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

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

0
ответ дан Partish 25 февр. '17 в 11:16
источник поделиться

Concurrency simple означает, что выполняется несколько задач (не обязательно параллельно). Например, если у нас есть 3 задачи, то в любой момент времени: более одного можно запустить или все может работать одновременно.

Parallelism означают, что они буквально работают параллельно. Таким образом, в этом случае все три должны работать одновременно.

0
ответ дан i_am_zero 15 дек. '14 в 14:53
источник поделиться

Объяснение из этот источник помог мне:

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

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

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

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

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

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

0
ответ дан Boolean_Type 19 авг. '17 в 14:37
источник поделиться

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

-4
ответ дан rocket441 19 дек. '15 в 5:30
источник поделиться

Другие вопросы по меткам