В чем разница между параллелизмом и параллелизмом? - PullRequest
897 голосов
/ 26 июня 2009

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

Примеры приветствуются.

Ответы [ 32 ]

1100 голосов
/ 26 июня 2009

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

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


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

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

  • Параллелизм: условие, которое возникает, когда по крайней мере два потока выполняются одновременно.

365 голосов
/ 10 июля 2014

Почему существует путаница

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

  • Одновременно : существует, происходит или выполняется одновременно (dictionary.com)
  • Параллель : очень похоже и часто происходит в одно и то же время (Мерриам Уэбстер).

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

  • Параллельность : прерывистость
  • Параллелизм : Независимость

Так что я имею в виду под вышеприведенными определениями?

Я уточню аналогию с реальным миром. Допустим, вы должны выполнить 2 очень важных задания за один день:

  1. Получить паспорт
  2. Подготовить презентацию

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

Случай 1: последовательное выполнение

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

Случай 2: одновременное выполнение

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

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

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

Случай 3: Параллельное выполнение

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

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

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

Случай 4: одновременно, но не параллельно

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

Случай 5: параллельно, но не одновременно

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

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

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

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

Случай 6: параллельное и параллельное выполнение

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

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

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

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


Вернуться к Информатике

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

  • Случай 1: Обработка прерываний.
  • Случай 2: Когда есть только один процессор, но все выполняющиеся задачи имеют время ожидания из-за ввода-вывода.
  • Случай 3: Часто наблюдается, когда мы говорим о кластерах с уменьшением карты или hadoop.
  • Случай 4: Я думаю, что Случай 4 встречается редко. Нередко задача выполняется одновременно, но не параллельно. Но это могло бы случиться. Например, предположим, что для вашей задачи требуется доступ к специальному вычислительному чипу, доступ к которому возможен только через процессор-1. Таким образом, даже если процессор-2 свободен, а процессор-1 выполняет какую-то другую задачу, специальная вычислительная задача не может выполняться на процессоре-2.
  • Случай 5: также редкий, но не такой редкий случай, как в случае 4. Непоследовательный код может быть критической областью, защищенной мьютексами. После запуска он должен выполнить до конца. Однако две разные критические области могут развиваться одновременно на двух разных процессорах.
  • Случай 6: IMO, большинство дискуссий о параллельном или параллельном программировании в основном говорят о случае 6. Это сочетание и сопоставление как параллельных, так и параллельных выполнений.

Параллелизм и Го

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

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

Но по сути, параллелизм лучше параллелизма?

Яблоки лучше апельсинов?

230 голосов
/ 20 августа 2012

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

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

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

Task

Параллелизм: Есть много одновременных декомпозиций задачи! Один пример:

Gophers

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

133 голосов
/ 05 ноября 2012

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

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

101 голосов
/ 10 июня 2015

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

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

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

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

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

44 голосов
/ 14 ноября 2010

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

Параллелизм: Если одна проблема решается несколькими процессорами.

alt text

33 голосов
/ 22 апреля 2015

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

Предположим , что организация организует шахматный турнир, в котором 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 = 2 минуты)

Предполагается, что всем игрокам нужно 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) ПАРАЛЛЕЛЬ - допустим, организаторы получают дополнительные средства и поэтому решили пригласить двух профессиональных чемпионов (одинаково способных) и разделили набор из тех же 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 = 930 сек = 15,5 минут (приблизительно)

Таким образом, все мероприятие (с участием двух таких параллельно работающих групп) будет примерно завершено за 15,5 минут

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

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

SERIAL> PARALLEL> CONCURRENT> CONCURRENT + PARALLEL

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

28 голосов
/ 26 июня 2009

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

Ex: два потока конкурируют за порт ввода-вывода.

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

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

26 голосов
/ 28 января 2015

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

Одновременно: «Две очереди обращаются к одному банкомату»

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

24 голосов
/ 26 июня 2009

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

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

...