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

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

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

30 ответов


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

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


цитирую солнечное Многопоточное Программирование Руководство:

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

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


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

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

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

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

  • параллелизм: Interruptability
  • параллельность: Independentability

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

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

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

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

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

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

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

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

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

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

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

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

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

случай 6: параллельный и параллельный Казнь

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

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

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

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


назад к информатике

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

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

параллелизм и Go

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

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

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

яблоки больше, чем апельсины?


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

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

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

Task

параллелизм: есть много одновременно разложения задачи! Один пример:

Gophers

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


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

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


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

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

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

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

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


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

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

alt text


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

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

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

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

таким образом, все событие будет примерно завершено за 101 минуту (ХУДШИЙ ПОДХОД)

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

предполагая, что все игроки берут 45sec, чтобы завершить свою очередь, так что на основе 10mins за игру от последовательного события нет. раундов до окончания игры должно быть 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) ПАРАЛЛЕЛЬНЫЙ + ПАРАЛЛЕЛЬНЫЙ - в приведенном выше сценарии, скажем, что два чемпиона игрок будет играть одновременно (читать 2-й пункт) с 5 игроками в своих соответствующих группах, так что теперь игры между группами работают параллельно, но внутри группы они работают одновременно.

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

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

см. улучшение от 101 минуты до 15,5 минуты (ЛУЧШИЙ ПОДХОД)

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

СЕРИЙНЫЙ > ПАРАЛЛЕЛИ > ОДНОВРЕМЕННО > ОДНОВРЕМЕННО+ПАРАЛЛЕЛЬНЫЙ

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


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

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

paralelism: разбиение задачи на несколько одинаковых частей.

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


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

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


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

Concurrent is: "две очереди доступа к одной машине ATM"

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


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

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

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


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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

Curmudgeonliness

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


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

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

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

давайте изображение игры, с 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 > ....

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

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

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


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

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

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

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

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


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

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


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

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

ПРОЦЕССОР 1: A ------------------------->

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

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

ПРОЦЕССОР 1: A -----------> B ----------> А -----------> B ---------->

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

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

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


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

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

подразделения:

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

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

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


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

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


"параллелизма" - это когда есть несколько вещей в.

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


примеры параллелизма без параллелизма:

  • несколько потоков на одном ядре.
  • несколько сообщений в очереди сообщений Win32.
  • несколько SqlDataReaderна Марс подключение.
  • несколько В JavaScript обещания во вкладке браузера.

обратите внимание, однако, что разница между параллелизмом и параллелизмом часто является вопросом перспективы. Приведенные выше примеры непараллельны с точки зрения (наблюдаемых эффектов) выполнения вашего кода. Но параллелизм на уровне инструкций существует даже в пределах одного ядра. Есть аппаратные средства, которые делают что-то параллельно с процессором, а затем прерывают процессор, когда это делается. GPU может рисовать на экран пока ты процедуру окна или выполняется обработчик событий. СУБД может пересекать B-деревья для следующего запроса, пока вы все еще извлекаете результаты предыдущего. Браузер может делать макет или сеть, пока ваш Promise.resolve() выполняется. И т. д. и т. п...

Итак, поехали. Мир такой же беспорядочный, как всегда;)


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

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

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


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

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


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

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


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

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

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


объяснением от этот источник было полезно для меня:

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

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

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

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

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

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


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

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

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

надеюсь, что это помогает!


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

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

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

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

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

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

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


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