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

844

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

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

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

Ваш Ответ

30   ответов
316
Why the Confusion Exists

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

Concurrent: existing, happening, or done at the same time(dictionary.com) Parallel: very similar and often happening at the same time(merriam webster).

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

Concurrency: Interruptability Parallelism: Independentability

So what do I mean by above definitions?

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

Get a passport Get a presentation done

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

Case 1: Sequential Execution

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

Case 2: Concurrent Execution

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

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

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

Case 3: Parallel Execution

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

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

Still with me? Alright...

Case 4: Concurrent But Not Parallel

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

Case 5: Parallel But Not Concurrent

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

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

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

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

Case 6: Concurrent and Parallel Execution

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

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

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

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

Back to Computer Science

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

Case 1: Interrupt processing. Case 2: When there is only one processor, but all executing tasks have wait times due to I/O. Case 3: Often seen when we are talking about map-reduce or hadoop clusters. Case 4: I think Case 4 is rare. It’s uncommon for a task to be concurrent but not parallel. But it could happen. For example, suppose your task requires access to a special computational chip which can be accessed through only processor-1. Thus, even if processor-2 is free and processor-1 is performing some other task, the special computation task cannot proceed on processor-2. Case 5: also rare, but not quite as rare as Case 4. A non-concurrent code can be a critical region protected by mutexes. Once it is started, it must execute to completion. However, two different critical regions can progress simultaneously on two different processors. Case 6: IMO, most discussions about parallel or concurrent programming are basically talking about Case 6. This is a mix and match of both parallel and concurrent executions. Concurrency and Go

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

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

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

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

Блестящий ответ, спасибо
Отличный пример и объяснение параллелизма и параллелизма
Случай 6: Коррупция более эффективна ...
Очень понравился этот ответ, спасибо, мужчина
2

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

Короче говоря, и параллелизм, и параллелизм являются свойствамиcomputing.

Как разница, здесьобъяснение от Роберта Харпера:

The first thing to understand is parallelism has nothing to do with concurrency. Concurrency is concerned with nondeterministic composition of programs (or their components). Parallelism is concerned with asymptotic efficiency of programs with deterministic behavior. Concurrency is all about managing the unmanageable: events arrive for reasons beyond our control, and we must respond to them. A user clicks a mouse, the window manager must respond, even though the display is demanding attention. Such situations are inherently nondeterministic, but we also employ pro forma nondeterminism in a deterministic setting by pretending that components signal events in an arbitrary order, and that we must respond to them as they arise. Nondeterministic composition is a powerful program structuring idea. Parallelism, on the other hand, is all about dependencies among the subcomputations of a deterministic computation. The result is not in doubt, but there are many means of achieving it, some more efficient than others. We wish to exploit those opportunities to our advantage.

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

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

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

3

Concurrency могут включать в себя задачи, выполняемые одновременно или нет (они действительно могут выполняться в отдельных процессорах / ядрах, но их также можно запускать в «тиках»). Что такоеimportant что параллелизм всегда относится кdoing a piece of one greater task, Так что в основном это часть некоторых вычислений. Вы должны быть умны в том, что вы можете делать одновременно, а что нет, и как синхронизировать.

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

1

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

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

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

7

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

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

A little more detail about parallelism:

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

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

A little more detail about interactivity:

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

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

Curmudgeonliness

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

5

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

Concurrent execution is possible on single processor (multiple threads, managed by scheduler or thread-pool)

Parallel execution is not possible on single processor but on multiple processors. (One process per processor)

Distributed computing is also a related topic and it can also be called concurrent computing but reverse is not true, like parallelism.

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

1

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

Concurrency is related to how an application handles multiple tasks it works on. An application may process one task at at time (sequentially) or work on multiple tasks at the same time (concurrently).

Parallelism on the other hand, is related to how an application handles each individual task. An application may process the task serially from start to end, or split the task up into subtasks which can be completed in parallel.

As you can see, an application can be concurrent, but not parallel. This means that it processes more than one task at the same time, but the tasks are not broken down into subtasks.

An application can also be parallel but not concurrent. This means that the application only works on one task at a time, and this task is broken down into subtasks which can be processed in parallel.

Additionally, an application can be neither concurrent nor parallel. This means that it works on only one task at a time, and the task is never broken down into subtasks for parallel execution.

Finally, an application can also be both concurrent and parallel, in that it both works on multiple tasks at the same time, and also breaks each task down into subtasks for parallel execution. However, some of the benefits of concurrency and parallelism may be lost in this scenario, as the CPUs in the computer are already kept reasonably busy with either concurrency or parallelism alone. Combining it may lead to only a small performance gain or even performance loss.

Это уже опубликовано вthis existing answer.
6

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

Concurrency когдаParallelism достигается наsingle core CPU используяscheduling algorithms который делит время процессора (временной интервал). Процессыinterleaved.

Units:

1 or many cores in a single CPU (pretty much all modern day processors) 1 or many CPUs on a motherboard (think old school servers) 1 application is 1 program (think Chrome browser) 1 program can have 1 or many processes (think each Chrome browser tab is a process) 1 process can have 1 or many threads from 1 program (Chrome tab playing Youtube video in 1 thread, another thread spawned for comments section, another for users login info) Thus, 1 program can have 1 or many threads of execution 1 process is thread(s)+allocated memory resources by OS (heap, registers, stack, class memory)
Я думаю, что это идеальный ответ в мире компьютерных наук.
9

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

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

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

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

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

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

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

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

3

in progress.

& Quot; Параллелизм & Quot; когда параллельные вещи прогрессируютat the same time.

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

Multiple threads on a single core. Multiple messages in a Win32 message queue. Multiple SqlDataReaders on a MARS connection. Multiple JavaScript promises in a browser tab.

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

Итак, поехали. Вор, как всегда, грязно;)

28

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

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

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

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

30

Assume что организация организует шахматный турнир, где 10 игроков (with equal chess playing skills) бросит вызовprofessional champion игрок в шахматы. А так как шахматы - это игра 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_ & amp; _champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20,35 минут (приблизительно)

СМОТРЕТЬ УЛУЧШЕНИЕ от 101 минут до 20,35 минут (BETTER APPROACH)

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

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

СМОТРЕТЬ УЛУЧШЕНИЕ от 101 до 50,5 минут (GOOD APPROACH)

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

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

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

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

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

SERIAL & gt; ПАРАЛЛЕЛЬНЫЙ & gt; CONCURRENT & gt; CONCURRENT + PARALLEL

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

Отличное объяснение. Есть одно дополнение. Параллельная модель для 2-го случая (когда профессиональный игрок перемещает ч / б игроков) будет улучшена, только если игрок сделает свой ход через 45 секунд. Другими словами, мы должны ожидать ввода-вывода в течение всего процесса. Если обычный игрок может повернуть менее чем за 45 секунд (5 или может быть 10 секунд), улучшение будет меньше. Таким образом, если в нашей работе нет времени ожидания ввода-вывода, параллелизм будет примерно таким же, как и при последовательном выполнении.
1

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

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

25

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

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

А многопоточность? Просто подумайте, как термин многопоточность вписывается в вышеприведенный сценарий. Является ли в этом случае параллельная == многопоточность, так как в каждом из очередей идут банкоматы в каждый момент времени?
3

s primarily concerned with the complexity that arises due to non-deterministic control flow. The quantitative costs associated with concurrent programs are typically both throughput and latency. Concurrent programs are often IO bound but not always, e.g. concurrent garbage collectors are entirely on-CPU. The pedagogical example of a concurrent program is a web crawler. This program initiates requests for web pages and accepts the responses concurrently as the results of the downloads become available, accumulating a set of pages that have already been visited. Control flow is non-deterministic because the responses are not necessarily received in the same order each time the program is run. This characteristic can make it very hard to debug concurrent programs. Some applications are fundamentally concurrent, e.g. web servers must handle client connections concurrently. Erlang is perhaps the most promising upcoming language for highly concurrent programming.

Parallel programming concerns operations that are overlapped for the specific goal of improving throughput. The difficulties of concurrent programming are evaded by making control flow deterministic. Typically, programs spawn sets of child tasks that run in parallel and the parent task only continues once every subtask has finished. This makes parallel programs much easier to debug. The hard part of parallel programming is performance optimization with respect to issues such as granularity and communication. The latter is still an issue in the context of multicores because there is a considerable cost associated with transferring data from one cache to another. Dense matrix-matrix multiply is a pedagogical example of parallel programming and it can be solved efficiently by using Straasen's divide-and-conquer algorithm and attacking the sub-problems in parallel. Cilk is perhaps the most promising language for high-performance parallel programming on shared-memory computers (including multicores).

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

40

Concurrency: alt text

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

alt text

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

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

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

4

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

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

CPU 1: A ------------------------- & gt;

CPU 2: B ------------------------- & gt;

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

CPU 1: A ----------- & gt; B ---------- & gt; A ----------- & gt; B ---------- & gt;

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

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

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

2

Parallelism: other in terms of data and resource that they require to do so. Eg: Google crawler can spawn thousands of threads and each thread can do it's task independently.

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

Это должен быть принятый ответ IMO, поскольку он отражает суть двух терминов.
1

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

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

4

ответ на этот вопрос (он авторSeven Concurrency Models in Seven Weeks):

Although they’re often confused, parallelism and concurrency are different things. Concurrency is an aspect of the problem domain—your code needs to handle multiple simultaneous (or near simultaneous) events. Parallelism, by contrast, is an aspect of the solution domain—you want to make your program run faster by processing different portions of the problem in parallel. Some approaches are applicable to concurrency, some to parallelism, and some to both. Understand which you’re faced with and choose the right tool for the job.

14

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

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

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

8

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

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

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

serial а такжеparallel представляют тип статической топологии, определяющей фактическое поведение схемы. Когда нет параллелизма,parallelism is deterministic.

Чтобы описать динамику,time-related phenomenaмы используем терминыsequential а такжеconcurrent, Например, определенный результат может быть получен через определенныйsequence задач (например, рецепт). Когда мы говорим с кем-то, мы производим последовательность слов. Однако в действительности многие другие процессы происходят в тот же момент, и, таким образом,concur к фактическому результату определенного действия. Если много людей говорят одновременно, параллельные разговоры могут мешать нашей последовательности, но результаты этого вмешательства заранее неизвестны.Concurrency introduces indeterminacy.

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

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

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

Этоsequential process воспроизводится наserial infrastructure.

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

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

Этоsequential process воспроизводится наparallel infrastructure (все еще частично сериализованный хотя).

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

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

Да, я немного уточнил / расширил свой ответ в одной из моих личных заметок в блоге. ;)
Я впервые увидел это здесь:s1l3n0.blogspot.com/2013/04/….
+1 Интересно. При вычислении одного определения, согласно принятому в настоящее время ответу, параллельное означает выполнение в перекрывающихся периодах времени, не обязательно одновременно (которые будут параллельными). В электронике, как вы описываете схемы, которые предназначены для того, чтобы создавать видимость происходящих в то же время вещей, но просто переключаются очень быстро. Продолжая аналогию с мороженым: я так люблю мороженое & gt; ребенок А1, мне нравится & gt; детское мороженое B1 & gt; ребенок С1 так много & gt; ребенок А2, мне нравится & gt; детское мороженое B2 & lt; ребенок С2 так сильно ...
223

параллелизм - это не параллелизм (это лучше!) (слайды) (говорить)

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

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

Task

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

Gophers

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

Где они сожгли книги ...
Для видео см.blog.heroku.com/archives/2013/2/24/…
@ EduardoLe & # xF3; n Вы явно не проверяли название разговора. Параллелизм не проблема, это просто способ думать о проблеме / задаче.
@asfer Concurrency является частью структуры проблемы. Между прочим, не объединяйте "параллелизм" (проблема) с «управлением параллелизмом»; (решение, часто используемое вместе с параллелизмом).
Извините, пришлось понизить его голос за "это лучше" немного. Правильный ответ состоит в том, что он отличается. Параллелизм является частью проблемы. Параллелизм - это часть решения.
2

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

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

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

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

9

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

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

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

картина стоит тысячи слов
94

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

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

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

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

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

126

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

Я собираюсь быть разборчивым, но если вы жонглируете парой шаров, вы можете иметь два шара одновременно (в зависимости от того, как вы жонглируете).
что я на самом деле хотел сказать «парным числом шаров»; было «четное количество шариков»
@thebugfinder, чтобы убедиться, что в Томасе больше нет места ошибкам & apos; пример. Параллелизм подобен жонглированию одной рукой. Независимо от того, как кажется, человек держит только один мяч за раз. Параллелизм - это когда жонглер использует обе руки.
Очень умный ответ. Я определенно вижу точку зрения багфиндера, но мне очень нравится этот ответ, если одно действие за раз принимается во внимание и согласовывается.
Я думаю, что лучше с "Параллелизмом - иметь одного человека на каждый шар". Если количество шаров увеличивается (представьте веб-запросы), эти люди могут начать жонглировать, делая выполнение параллельным и параллельным. Также я хотел бы, чтобы кто-то мог объяснить схему реактора на примере жонглеров.
1038

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

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

квотированиеВс & APOS; sMultithreaded Programming Guide:

Concurrency: A condition that exists when at least two threads are making progress. A more generalized form of parallelism that can include time-slicing as a form of virtual parallelism.

Parallelism: A condition that arises when at least two threads are executing simultaneously.

С этой целью цитата Sun может быть перефразирована следующим образом: - Параллельность: условие, которое существует, когда в течение заданногоperiod времени, два потока делают успехи - Параллелизм: условие, которое возникает, когда, учитывая конкретныйpoint со временем два потока выполняются одновременно
Мне очень нравится комментарий Адриана Муата. Смотрите также это отличное объяснение:haskell.org/haskellwiki/Parallelism_vs._Concurrency
Если бы Sequential и Parallel были значениями в перечислении, как бы называлось это перечисление?
@Raj: Правильный параллелизм (в смысле многопоточности) невозможен с одноядерными процессорами.
Мне нравится этот ответ, но я бы, возможно, пошел дальше и охарактеризовал параллелизм как свойство программы или системы (а параллелизм - как поведение во время выполнения нескольких задач одновременно).

Похожие вопросы