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

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

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

Ответы [ 32 ]

14 голосов
/ 17 января 2017

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

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

Наслаждайтесь.

13 голосов
/ 08 ноября 2018

Выполнение параллельного программирования имеет 2 типа: непараллельное параллельное программирование и параллельное параллельное программирование (также известное как параллелизм).

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

Ссылка: Введение в параллелизм в языках программирования

9 голосов
/ 11 сентября 2013

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

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

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

2 или более серверов, одна Очередь -> параллелизм (2 задания выполняются в одно и то же время), но нет параллелизма (сервер не разделяет время, третье задание должно ждать, пока один из серверов не завершится.)

2 или более серверов, 2 или более разных очередей -> параллелизм и параллелизм

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

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

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

8 голосов
/ 24 апреля 2013

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

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

8 голосов
/ 06 сентября 2018

Параллелизм - это одновременное выполнение процессов на multiple cores per CPU или multiple CPUs (on a single motherboard).

Параллелизм - это когда Параллелизм достигается на single core CPU с помощью алгоритмов планирования , которые делят время ЦП (временной интервал). Процессы чередуются .

Единицы:

  • 1 или много ядер в одном процессоре (почти все современные процессоры)
  • 1 или много процессоров на материнской плате (вспомните серверы старой школы)
  • 1 приложение - это 1 программа (думаю, браузер Chrome)
  • 1 программа может иметь 1 или несколько процессов (представьте, что каждая вкладка браузера Chrome - это процесс)
  • 1 процесс может иметь 1 или несколько потоков из 1 программы (вкладка Chrome воспроизводит видео Youtube в 1 теме, другая тема порождается для раздела комментариев, другая для информации для входа пользователей)
  • Таким образом, 1 программа может иметь 1 или несколько потоков выполнения
  • 1 процесс thread(s)+allocated memory resources by OS (куча, регистры, стек, класс память)
7 голосов
/ 27 марта 2014

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

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

Немного подробнее о параллелизме :

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

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

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

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

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

Curmudgeonliness

Мне не нравится лозунг Роба Пайка "параллелизм, это лучше". Параллелизм не лучше и не хуже параллелизма. Параллельность включает в себя интерактивность, которую нельзя сравнивать лучше / хуже с параллелизмом. Это все равно что сказать «поток управления лучше, чем данные».

6 голосов
/ 26 апреля 2013

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

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

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

Давайте представим игру с 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 > ....

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

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

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

5 голосов
/ 23 июня 2015

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

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

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

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

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

4 голосов
/ 03 июля 2018

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

Параллельность против параллелизма Когда два потока работают параллельно, они оба работают одновременно. Например, если у нас есть два потока, A и B, то их параллельное выполнение будет выглядеть так:

CPU 1: A ------------------------->

CPU 2: B ------------------------->

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

CPU 1: A -----------> B ----------> A -----------> B ----- ----->

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

Источник: Еще один ответ здесь

Надеюсь, это поможет.

4 голосов
/ 02 ноября 2016

Мне действительно нравится ответ Пола Мясника на этот вопрос (он является автором Семи моделей параллелизма за семь недель ):

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

...