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




parallel programming c# (20)

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

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


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

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

Скопировано из моего ответа: https://.com/a/3982782


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

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

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

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

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

Итак, что я имею в виду под определениями?

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

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

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

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

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

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

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

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

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

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

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

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

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

Случай 4: параллельный, но не параллельный

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

Случай 5: параллельный, но не параллельный

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

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

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

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

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

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

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

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

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

Вернуться в Компьютерные науки

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

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

Параллелизм и переход

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

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

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

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


(Я совершенно удивлен, что такой фундаментальный вопрос не решен правильно и аккуратно в течение многих лет ...)

Короче говоря, и параллелизм, и параллелизм - это свойства вычислений .

Что касается разницы, вот объяснение Роберта Харпера :

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

Они могут быть своего рода ортогональными свойствами в программах. Прочтите s1l3n0.blogspot.com/2013/04/… для дополнительных иллюстраций. И это обсуждается немного больше о различиях в компонентах программирования , таких как потоки.

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

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


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

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

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

Давайте изображаем игру с 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 > ....

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

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

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


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

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

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

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

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


Мне очень нравится answer Пола Бутчера на этот вопрос (он является автором семи моделей параллелизма за семь недель ):

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


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

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


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

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


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

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

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

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

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

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

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

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


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

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

Наслаждаться.


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

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

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

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

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


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

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


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

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

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

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

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

Немного больше информации об интерактивности :

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

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

Curmudgeonliness

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


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

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

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

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


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

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


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

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

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

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

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


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

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


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

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


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

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


Идея Пайка о «параллелизме» - это намеренное решение о разработке и реализации. Конкретный способ разработки программы может или не может демонстрировать поведенческий «параллелизм»; это зависит от среды выполнения.

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

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





parallel-processing