Яка різниця між паралельністю та паралелізмом?


1075

Яка різниця між паралельністю та паралелізмом?

Приклади цінуються.


41
коротка відповідь: одночасність - це два рядки, які замовники замовляють з однієї каси (лінії впорядковують замовлення); Паралелізм - це дві лінії, які замовники замовляють у двох касирів (кожна лінія отримує свою касу).
chharvey

@chharvey: Я дійсно думаю, що це має бути відповіддю. Короткий (два рядки тексту, якщо залишити "коротку відповідь"), до суті, миттєво зрозумілий. Чудово зроблено!
Майк Максвелл

Відповіді:


1269

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

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


Цитуючи Посібник з багатопотокового програмування Sun :

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

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


169
Мені подобається ця відповідь, але, можливо, я б пішов далі та охарактеризував паралельність як властивість програми чи системи (і паралелізм як поведінка часу виконання декількох завдань одночасно).
Адріан Муат

24
Мені дуже подобається коментар Адріана Муата. Дивіться також це відмінне пояснення: haskell.org/haskellwiki/Parallelism_vs._Concurrency
jberryman

9
@Raj: Виправити паралелізм (у розумінні багатопотокової) неможливо з одноядерними процесорами.
RichieHindle

5
Якби послідовність і паралельність були обома значеннями в перерахунку, як би називалося це перерахування?
toddmo

11
З цією метою цитата Соня може бути перероблена як: - Паралельність: умова, яка існує, коли протягом певного періоду часу дві нитки прогресують - паралелізм: умова, яка виникає, коли, з огляду на певний момент часу, два потоки виконують одночасно
Філіпп

494

Чому плутанина існує

Плутанина існує тому, що значення словника обох цих слів майже однакові:

  • Паралельно : наявні, що відбуваються або робляться одночасно (словник.com)
  • Паралельно : дуже схожий і часто відбувається одночасно (merriam webster).

І все ж спосіб їх використання в інформатиці та програмуванні зовсім інший. Ось моя інтерпретація:

  • Паралельність : Переривчастість
  • Паралелізм : Незалежність

То що я маю на увазі під вищезазначеними визначеннями?

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

  1. Отримайте паспорт
  2. Початок презентації

Тепер проблема полягає в тому, що завдання-1 вимагає від вас поїхати в надзвичайно бюрократичний урядовий офіс, який змушує вас чекати 4 години в черзі, щоб отримати паспорт. Тим часом завдання-2 вимагає ваш офіс, і це критичне завдання. Обидва повинні бути закінчені в конкретний день.

Випадок 1: Послідовне виконання

Зазвичай, ви їдете до паспортного офісу протягом 2 годин, будете чекати в черзі протягом 4 годин, виконати завдання, проїхати дві години назад, поїхати додому, не проспатись ще 5 годин і зробити презентацію.

Випадок 2: Паралельне виконання

Але ти розумний. Ви плануєте заздалегідь. Ви носите з собою ноутбук, і, поки чекаєте в черзі, ви починаєте працювати над своєю презентацією. Таким чином, як тільки ви повернетесь додому, вам просто потрібно працювати 1 додаткову годину замість 5.

У цьому випадку обидва завдання ви виконуєте, лише по шматочках. Ви перервали паспортне завдання, поки чекали в рядку і працювали над презентацією. Коли ваш номер зателефонував, ви перервали завдання презентації та перейшли до паспортного завдання. Економія часу була, по суті, можливою завдяки переривці обох завдань.

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

Випадок 3: Паралельне виконання

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

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

Ще зі мною? Добре ...

Випадок 4: Паралельний, але не паралельний

Пам’ятайте своє паспортне завдання, де вам доведеться чекати в рядку? Оскільки це ваш паспорт, ваш помічник не може чекати в черзі до вас. Таким чином, паспортне завдання має переривчастість (ви можете зупинити його, поки ви чекаєте в рядку, і відновити його пізніше, коли ваш номер буде викликаний), але ніякої незалежності (ваш помічник не може чекати замість вас).

Випадок 5: Паралельний, але не сумісний

Припустимо, урядовий офіс має перевірку безпеки для входу в приміщення. Тут ви повинні видалити всі електронні пристрої та надіслати їх офіцерам, і вони повернуть ваші пристрої лише після виконання завдання.

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

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

У цьому випадку завдання презентації є незалежним (ви або ваш помічник можете поставити за 5 годин цілеспрямовані зусилля), але не переривається .

Випадок 6: Паралельне та паралельне виконання

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

Це стало можливим, оскільки завдання презентації має незалежність (будь-хто з вас це може зробити) та переривчивість (ви можете зупинити її та відновити пізніше). Таким чином, ви одночасно виконували обидва завдання та паралельно виконували завдання презентації.

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

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


Повернутися до інформатики

Наведемо приклади сценаріїв, типових для кожного з цих випадків:

  • Випадок 1: Обробка перерв.
  • Випадок 2: Якщо є лише один процесор, але всі завдання, що виконують, мають час очікування через I / O.
  • Випадок 3: Часто спостерігається, коли ми говоримо про кластери, що зменшують карти або хаодоп.
  • Випадок 4: Я думаю, що випадок 4 є рідкісним. Нечасто, щоб завдання були паралельними, але не паралельними. Але це могло статися. Наприклад, припустимо, що для вашого завдання потрібен доступ до спеціальної обчислювальної мікросхеми, доступ до якої можна отримати лише через процесор-1. Таким чином, навіть якщо процесор-2 вільний, а процесор-1 виконує якусь іншу задачу, спеціальна обчислювальна задача не може продовжуватися на процесорі-2.
  • Випадок 5: також рідкісний, але не настільки рідкісний, як випадок 4. Несучасний код може бути критичною областю, захищеною мютексами. Після його запуску він повинен виконуватись до завершення. Однак дві різні критичні області можуть прогресувати одночасно на двох різних процесорах.
  • Випадок 6: ІМО, більшість дискусій про паралельне або одночасне програмування в основному говорять про випадок 6. Це поєднання і збіг паралельних і одночасних виконання.

Конкурс і Іди

Якщо ви бачите, чому Роб Пайк говорить, що сумісність краще, ви повинні зрозуміти, що причина. У вас дійсно довге завдання, в якому є кілька періодів очікування, коли ви чекаєте деяких зовнішніх операцій, таких як читання файлів, завантаження в мережу. У своїй лекції все, що він говорить, - "просто розбийте це довге послідовне завдання, щоб ви могли зробити щось корисне, поки будете чекати". Ось чому він розмовляє про різні організації з різними ховрахами.

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

Але по суті, чи паралелізм кращий за паралелізм?

Чи яблука краще, ніж апельсини?


Дякую за випадок 5. Я часто думаю, що паралельна неявна означає паралельність.
hqt

2
Цикл подій Node.js є хорошим прикладом для випадку 4. Навіть якщо процесор B має вільні ресурси, запит X повинен оброблятися процесором A, який зайнятий обробкою Y. Якщо setTimeout викликається Y, X можна обробити, то, після закінчення часу обробка Y також закінчиться.
Лукас Янон

Варто відзначити два визначення слова "паралельність", які були викладені у прийнятій відповіді, і це досить чітко . Перший стосується концепції виконання декількох завдань у певні часові періоди (тобто паралелізм означає сумісність по def), другий стосується концепції переривання однієї задачі для виконання якоїсь іншої.
Mergasov

Подібно до коментаря вище - багатопотоковий пітон є прикладом випадку 4. Я не думаю, що цей випадок є рідкісним. Будь-який блокування глобального перекладача призведе до випадку 4 (якщо він взагалі допускає сумісність).
chub500

245

Мені подобається розмова Роб Піка: Паралельність - це не паралелізм (це краще!) (Слайди) (розмова)

Роб зазвичай розмовляє про Go і зазвичай розглядає питання Конкурсу проти Паралелізму у візуальному та інтуїтивно зрозумілому поясненні! Ось короткий підсумок:

Завдання: спалимо купу застарілих мовних посібників! По одному!

Завдання

Паралельність: Є багато одночасно декомпозицій завдання! Один приклад:

Гофери

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



15
Вибачте, довелося підкреслити його за біт "краще". Правильна відповідь - це різна річ. Паралельність - частина проблеми. Паралелізм є частиною рішення.
піон

@ EduardoLeón Ви, очевидно, не перевіряли назву бесіди. Паралельність - це не проблема, це лише спосіб продумати проблему / завдання.
asfer

5
@asfer Concurrency є частиною структури проблеми. До речі, не пов'язуйте "паралельність" (проблему) з "контролем паралельності" (рішення, яке часто використовується разом з паралелізмом).
піон

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

146

Щоб додати те, що сказали інші:

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


2
Я буду вибагливим, але якщо ти жонглюєш парною кількістю кульок, то можеш мати два кулі одночасно (залежно від того, як ти жонглюєш).
thebugfinder

52
@thebugfinder, щоб переконатися, що в прикладі Томаса більше немає місця для помилок. Конкурс - це як людина, що жонглює лише 1 рукою. Незалежно від того, наскільки це здається, людина тримає за все максимум один м'яч. Паралелізм - це коли жонглер використовує обидві руки.
bigtunacan

те, що я насправді мав на увазі сказати "парною кількістю кульок", було "парне число кульок"
thebugfinder

1
Дуже розумна відповідь. Я точно можу побачити пункт thebugfinder, але мені дуже подобається ця відповідь, якщо враховувати та погоджувати одну дію за раз.
БК

2
Я думаю, що краще з "Паралелізмом є одна людина на кожен бал". Якщо кількість кульок збільшується (уявіть веб-запити), ці люди можуть почати жонглювати, роблячи виконання одночасним і паралельним. Також я хотів би, щоб хтось міг пояснити схему реактора на прикладі жонглерів ..
jj_

120

Скажімо, у вас є програма, яка має дві нитки. Програма може працювати двома способами:

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

В обох випадках ми маємо сумісність із простого факту, що у нас працює більше ніж одна нитка.

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

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


4
Мені сподобалися блоки ниток. Простий, але ідеальний! Дякую за таку дивовижну відповідь.
bozzmob

53

Паралельність: якщо дві або більше проблем вирішуються одним процесором. alt текст

Паралельність: Якщо одну проблему вирішують кілька процесорів.

alt текст


55
Я не погоджуюся з цим - програма, розроблена для одночасного, може або не може працювати паралельно; паралельність - це більше атрибут програми, при її виконанні може виникати паралелізм.
Адріан Муат

36

Спробую пояснити цікавим і легким для розуміння прикладом. :)

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

Сподіваємось, що наступні сценарії легко описують кілька способів проведення цих 10 ігор:

1) СЕРІЙНИЙ - скажемо, що професіонал грає з кожною людиною один за одним, тобто починає і закінчує гру з однією людиною, а потім починає наступну гру з наступною людиною тощо. Іншими словами, вони вирішили проводити ігри послідовно. Отже, якщо на одну гру потрібно 10 хвилин, то на 10 ігор знадобиться 100 хвилин, також припустимо, що перехід від однієї гри до іншої займає 6 секунд, то для 10 ігор це буде 54 секунди (приблизно 1 хв).

тож вся подія приблизно завершиться за 101 хв. ( ПІШИЙ ПІДХІД )

2) СУЧАСНИЙ - сказати, що професіонал грає свою чергу і переходить до наступного гравця, тому всі 10 гравців грають одночасно, але професійний гравець не з двома особами одночасно, він грає свою чергу і переходить до наступної людини. Тепер припустимо, що професійному гравцеві потрібно відіграти свою чергу 6 секунд, а також час переходу професійного гравця з б / у двох гравців - 6 секунд, тому загальний час переходу для повернення до першого гравця становитиме 1 хвилину (10x6 сек). Тому до того часу, коли він повернеться до першої особи, з якою розпочалася подія, минуло 2 хвилини (10xtime_per_turn_by_champion + 10xtransition_time = 2 хвилини)

Якщо припустити, що всі гравці беруть 45 сек, щоб завершити свою чергу, виходячи з 10 хвилин на гру від СЕРІЙНОЇ події, немає. раундів до закінчення гри має становити 600 / (45 + 6) = 11 раундів (приблизно)

Таким чином, вся подія приблизно завершиться за 11xtime_per_turn_by_player _ & _ чемпіон + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sec = 20,35 хв (приблизно)

СМ поліпшення від 101 хвилин до 20.35 хв ( найкращий підхід )

3) PARALLEL - дозвольмо сказати, що організатори отримують додаткові кошти, і тому вирішили запросити двох професійних гравців-чемпіонів (обох однаково здатних) і розділили набір тих же 10 гравців (претендентів) на дві групи з 5-ти кожного та призначили їх двом чемпіонам, одному згрупуйте кожен. Зараз подія проходить паралельно в цих двох сетах, тобто щонайменше два гравці (по одному в кожній групі) грають проти двох професійних гравців у відповідній групі.

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

ДИВІТТЕ ПОЛОЖЕННЯ від 101 хв до 50,5 хв. ( ДОБРИЙ ПІДХІД )

4) СУЧАСНИЙ + ПАРАЛЕЛЬ - У вищеописаному сценарії скажемо, що два гравці-чемпіони будуть грати одночасно (читати другу точку) з 5 гравцями у відповідних групах, тому зараз ігри в різних групах проводяться паралельно, але всередині групи вони працюють одночасно.

Таким чином, ігри в одній групі приблизно завершаться за 11xtime_per_turn_by_player _ & _ чемпіон + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930сек = 15,5хв (приблизно)

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

ВИДІТЬСЯ РОЗШИРЕННЯ від 101 хв до 15,5 хв ( найкращий підхід )

ПРИМІТКА: у вищеописаному сценарії, якщо ви заміните 10 гравців на 10 подібних робочих місць та двох професійних гравців з двома ядрами процесора, знову ж таки наступне впорядкування залишиться вірним:

СЕРІЙНА> ПАРАЛЕЛЬ> СУЧАСНА> СТВОРЕНА + ПАРАЛЕЛЬНА

(ПРИМІТКА. Цей порядок може змінитися для інших сценаріїв, оскільки це впорядкування сильно залежить від взаємозалежності робочих місць, потреб в комунікаціях, робочих робочих місцях та перехідних накладних робочих потреб)


2
Чудове пояснення. Є одне доповнення. Паралельна модель для другого випадку (коли професійний гравець рухається з ч / б гравців) отримає вдосконалення, лише якщо гравець зробить свою чергу за 45 секунд. Іншими словами, ми повинні чекати введення-виводу в усьому процесі. Якщо звичайний гравець може повернутись менш ніж за 45 секунд (5 або може бути 10 секунд), поліпшення буде менше. Таким чином, якщо у нас не буде часу очікування вводу / виводу, паралельність буде приблизно такою ж, як і послідовне виконання.
Псилон

33

Простий приклад:

Паралельно: "Дві черги, що отримують доступ до одного банкомата"

Паралельна: "Дві черги та два банкомати"


А багатопоточність? Думаю лише про те, як термін багатопотокованість вписується у вищезазначений сценарій. У цьому випадку чи є одночасне багатопотокове читання одночасно, як в одному з кожної черги йдуть банкомати за кожну мить?
Хофі

31

Уявіть, що ви вивчаєте нову мову програмування, переглядаючи відеоурок. Вам потрібно призупинити відео, застосувати сказане в коді, а потім продовжити перегляд. Це паралельність.

Тепер ти професійний програміст. І вам подобається слухати спокійну музику під час кодування. Ось паралелізм.

Як розповів Ендрю Герран в блозі GoLang

Паралельність - це вирішення справи з багатьма речами одночасно. Паралелізм - це робити багато справ одночасно.

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


29

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

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


28

конкретність: безліч потоків виконання з можливістю розподілу ресурсів

Наприклад: два потоки конкурують за порт вводу / виводу.

паралелізм: розділення проблеми на кілька подібних фрагментів.

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


21

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

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

Довідка: Вступ до паралельності мов програмування


8
картина вартістю тисяч слів
Сенсейву

21

Паралелізм - це одночасне виконання процесів на multiple cores per CPUабо multiple CPUs (on a single motherboard).

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

Одиниці:

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

2
Я думаю, що це ідеальна відповідь у світі інформатики.
sofs1

1
Ця відповідь повинна бути прийнятою, а не філософією вгорі та внизу
Євген Суніч

10

Паралельність => Коли декілька завдань виконуються у періоди, що перетинаються, із спільними ресурсами (можливо, максимальне використання ресурсів).

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


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

9

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

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

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

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

2 або більше серверів, 2 або більше різних черг -> одночасність і паралельність

Іншими словами, паралельність - це спільний час для завершення роботи, МОЖЕ зайняти той самий час, щоб виконати свою роботу, але принаймні розпочати роботу рано. Важливим є те, що робочі місця можна розрізати на менші робочі місця, що дозволяє переплутати.

Паралелізм досягається за допомогою більшої кількості процесорів, серверів, людей тощо, які працюють паралельно.

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


7

Я хочу запропонувати відповідь, яка трохи конфліктує з деякими популярними відповідями тут. На мою думку, паралельність - це загальний термін, що включає паралелізм. Паралельність застосовується до будь-якої ситуації, коли різні завдання або одиниці роботи перетинаються в часі. Паралелізм стосується конкретніших ситуацій, коли окремі одиниці роботи оцінюються / виконуються в один і той же фізичний час. Паралелізм є прискоренням програмного забезпечення, що прискорює програмне забезпечення, яке може отримати вигоду з безлічі фізичних ресурсів обчислення. Інша основна концепція, яка підпадає під паралельність, - це інтерактивність. Інтерактивністьзастосовується, коли перекриття завдань спостерігається із зовнішнього світу. Раціональний інтеракційний інтерактивність - це створення програмного забезпечення, яке реагує на реальні об'єкти, такі як користувачі, мережеві однорангові, апаратні периферійні пристрої тощо.

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

Ще трохи детальніше про паралелізм :

Паралелізм існує на дуже малих масштабах (наприклад, паралелізм рівня інструкцій у процесорах), середніх масштабах (наприклад, багатоядерні процесори) та великих масштабах (наприклад, високопродуктивні обчислювальні кластери). Тиск на розробників програмного забезпечення для викриття більшої нитки паралелізму на рівні потоку в останні роки посилився через зростання багатоядерних процесорів. Паралелізм тісно пов'язаний з поняттям залежності . Залежності обмежують ступінь досягнення паралелізму; дві задачі не можна виконувати паралельно, якщо одна залежить від іншої (Ігнорування спекуляцій).

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

Ще трохи детальніше про інтерактивність :

Найбільш основний і поширений спосіб інтерактивності - це події (тобто цикл подій та обробники / зворотні виклики). Для простих завдань події чудово підійдуть. Намагаючись виконувати більш складні завдання з подіями, потрапляє у видобуток стека (він же пеклує зворотний дзвінок; він же інверсія управління). Коли ви втомитеся від подій, ви можете спробувати більш екзотичні речі, такі як генератори, підпрограми (aka Async / Await) або кооперативні теми.

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

Кмітливість

Мені не подобається гасло Роба Пайка "паралельність - це не паралелізм; це краще". Паралельність не є ні кращою, ні гіршою, ніж паралелізм. Паралельність включає інтерактивність, яку не можна порівняти кращим / гіршим способом з паралелізмом. Це як би сказати "керуючий потік краще, ніж дані".


6

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

Для того, щоб описати динамічні явища , пов'язані з часом , ми використовуємо терміни послідовний і одночасний . Наприклад, певний результат може бути отриманий через певну послідовність завдань (наприклад, рецепт). Коли ми з кимось спілкуємось, ми виробляємо послідовність слів. Однак насправді багато інших процесів відбуваються в той самий момент і, таким чином, погоджуються з фактичним результатом певної дії. Якщо багато людей розмовляють одночасно, паралельні переговори можуть заважати нашій послідовності, але результати цього втручання заздалегідь невідомі. Паралельність вводить невизначеність .

Послідовна / паралельна та послідовна / паралельна характеристика є ортогональними. Прикладом цього є цифровий зв’язок. У послідовному адаптері цифрове повідомлення тимчасово (тобто послідовно ) поширюється по одній і тій же лінії зв'язку (наприклад, один провід). У паралельному перехіднику це розділяється також на паралельні лінії зв'язку (наприклад, багато проводів), а потім реконструюється на приймальному кінці.

Давайте зобразимо гру з 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 Цікаво. Обчислюючи одне визначення, відповідно до прийнятої відповіді на даний момент, означає виконання у певні періоди часу, не обов'язково одночасно (що було б паралельно). В електроніці ви описуєте схеми, які створені для того, щоб створювати зовнішній вигляд речей, що відбуваються одночасно, але просто перемикаються дуже швидко. Щоб продовжити вашу аналогію морозива: мені так подобається морозиво> дитина А1 мені подобається> дитяче морозиво B1> дитина C1 так сильно> дитина A2 мені подобається> дитяче морозиво B2 <дитина C2 так сильно ...
акарлон

Я вперше побачив це тут: s1l3n0.blogspot.com/2013/04 / ... .
FrankHB

Так, я уточнив / продовжив трохи свою відповідь на одному з моїх особистих блог-записок. ;)
s1l3n0

5

Паралельність - це узагальнена форма паралелізму. Наприклад, паралельну програму також можна назвати одночасною, але зворотне не відповідає дійсності.

  1. Одночасне виконання можливе на одному процесорі (кілька потоків, якими керує планувальник або пул потоків)

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

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

Детальніше читайте в цьому дослідницькому документі Концепції паралельного програмування


5

Мені дуже сподобалося це графічне зображення з іншої відповіді - я думаю, що він відповідає на питання набагато краще, ніж багато з вищезазначених відповідей

Паралелізм проти одночасності Коли дві нитки працюють паралельно, вони працюють одночасно. Наприклад, якщо у нас є дві нитки, A і B, то їх паралельне виконання виглядатиме так:

ЦП 1: ------------------------->

ЦП 2: Б ------------------------->

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

ЦП 1: A -----------> B ----------> A -----------> B -------- ->

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

Джерело: Тут ще одна відповідь

Сподіваюся, що це допомагає.


4

Я на насправді , як Пол М'ясник відповідь на це питання (він автор сім паралелізм моделей в семи тижнях ):

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


3

Паралельність може включати завдання, які виконуються одночасно чи ні (вони дійсно можуть бути запущені в окремих процесорах / ядрах, але вони також можуть бути запущені "тиками"). Що важливо , що паралелізм завжди відноситься до робити частину однієї великої праці . Тому в основному це частина деяких обчислень. Ви повинні бути розумними щодо того, що ви можете робити одночасно, а що не робити і як синхронізувати.

Паралелізм означає, що ви просто робите деякі речі одночасно. Їм не потрібно бути частиною вирішення однієї проблеми. Наприклад, ваші потоки можуть вирішити одну проблему. Звичайно, також стосується синхронізації, але з іншого погляду.


3

«Паралелізм», коли є кілька речей , в ході .

«Паралелізм», коли одночасно речі розвиваються одночасно .


Приклади одночасності без паралелізму:

  • Кілька ниток на одному ядрі.
  • Кілька повідомлень у черзі повідомлень Win32.
  • Кілька SqlDataReaders на з'єднанні MARS .
  • Кілька обіцянок JavaScript на вкладці браузера.

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

Так що ви йдете. Світ так само безладний, як завжди;)


3

На мою думку, найпростіший та найелегантніший спосіб розуміння двох. Паралельність дозволяє переплутати виконання і так може дати ілюзію паралелізму. Це означає, що паралельна система може запускати ваше відео на YouTube поряд із написанням документа в Word, наприклад. Базова ОС, будучи одночасною системою, дає можливість цим завданням поєднати їх виконання. Оскільки комп'ютери виконують інструкції так швидко, це створює зовнішній вигляд одночасно робити дві речі.

Паралелізм - це коли такі речі справді йдуть паралельно. У наведеному вище прикладі ви можете виявити, що код обробки відео виконується на одному ядрі, а програма Word працює на іншому. Зауважте, що це означає, що паралельна програма також може бути паралельною! Структурування програми за допомогою потоків і процесів дозволяє програмі використовувати базовий апарат і, можливо, робити це паралельно.

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

Сподіваюся, це допомагає!


3

Одночасне програмування стосується операцій, які, як видається, перекриваються, і в першу чергу стосуються складності, яка виникає через недетермінований потік управління. Кількісні витрати, пов'язані з одночасними програмами, як правило, є як пропускною здатністю, так і затримкою. Одночасні програми часто пов'язані з вводу-виводу, але не завжди, наприклад, одночасні збирачі сміття повністю є на процесорі. Педагогічний приклад паралельної програми - веб-сканер. Ця програма ініціює запити на веб-сторінки та приймає відповіді одночасно, коли результати завантажень стають доступними, накопичуючи набір вже відвіданих сторінок. Контрольний потік є недетермінованим, оскільки відповіді не обов'язково надходять у тому самому порядку щоразу при запуску програми. Ця характеристика може зробити дуже важким налагодження одночасних програм. Деякі програми є принципово одночасними, наприклад веб-сервери повинні одночасно обробляти клієнтські з'єднання. Erlang - це, мабуть, найбільш перспективна мова для майбутнього програмування.

Паралельне програмування стосується операцій, які перекриваються задля конкретної мети покращення пропускної здатності. Труднощі паралельного програмування усуваються шляхом детермінованості потоку управління. Зазвичай програми створюють набори наборів дочірніх завдань, які виконуються паралельно, а батьківське завдання продовжується лише після того, як кожен підзадач буде завершений. Це робить паралельні програми набагато легшими для налагодження. Важкою частиною паралельного програмування є оптимізація продуктивності стосовно таких питань, як деталізація та комунікація. Останнє все ще залишається проблемою в контексті багатоядерних осередків, оскільки є значна вартість, пов’язана з переносом даних з одного кеша в інший. Помноження щільної матриці на матрицю - це педагогічний приклад паралельного програмування, і це можна ефективно вирішити, використовуючи Страасен ' s алгоритм розділення та підкорення та паралельна атака на субпроблеми. Cilk - це, мабуть, найперспективніша мова для високопродуктивного паралельного програмування на комп'ютерах спільної пам'яті (включаючи багатоядерні).

Скопійовано з моєї відповіді: https://stackoverflow.com/a/3982782


2

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

Паралельність: Паралельність з'являється, коли ви обмінюєтесь даними, спільним ресурсом між потоками. У транзакційній системі це означає, що вам доведеться синхронізувати критичний розділ коду, використовуючи такі методи, як Замки, Семафори тощо.


Це має бути прийнятою відповіддю ІМО, оскільки вона відображає суть двох термінів.
michid

2

(Я дуже здивований, таке фундаментальне питання роками не вирішується правильно та акуратно ...)

Коротше кажучи, і паралельність, і паралелізм є властивостями обчислень .

Що стосується різниці, ось пояснення від Роберта Харпера :

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

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

Зауважте, що нитка або багатозадачність - це всі варіанти обчислень, які служать більш конкретним цілям. Вони можуть бути пов'язані з паралелізмом і одночасністю, але не суттєвим чином. Таким чином, навряд чи вони хороші, щоб почати пояснення.

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


2

"Паралельно" одночасно робить щось - що завгодно. Вони можуть бути різними речами або одними і тими ж. Незважаючи на прийняту відповідь, якої бракує, справа не в тому, щоб "виявитися одночасно". Це справді одночасно. Для запуску паралельного коду вам потрібно кілька ядер CPU, або використовуючи спільну пам'ять в одному хості, або розподілену пам'ять на різних хостах. Трубопроводи з 3 різних завдань, які одночасно виконуються одночасно, є прикладом: Рівень задач-2 повинен чекати підрозділів, виконаних рівнем задач-1, а рівень завдання 3 повинен чекати на одиниці роботи, виконані завдання-рівень-2. Інший приклад - сумісність 1-виробника з 1 -м споживачем; або багато виробників і 1 споживач; читачі та письменники; та ін.

"Паралельно" одночасно робить ті самі речі. Це одночасно, але, крім того, це та сама поведінка, що відбувається в один і той же час, і, як правило, за різними даними. Матрична алгебра часто може бути паралельна, тому що у вас одна і та ж операція виконується неодноразово: Наприклад, суми стовпців матриці можуть бути обчислені одночасно, використовуючи ту саму поведінку (суму), але в різних стовпцях. Це загальна стратегія розділити (розділити) стовпці між наявними процесорними ядрами, щоб у вас було близько однакової кількості робіт (кількості стовпців), що обробляється кожним ядром процесора. Ще один спосіб розділити роботу - це сумні завдання, коли працівники, які закінчують свою роботу, повертаються до менеджера, який роздає роботу та отримує більше роботи динамічно, поки все не буде зроблено. Алгоритм оформлення квитків - ще один.

Не просто числовий код можна паралелізувати. Файли занадто часто можна обробляти паралельно. У програмі обробки природних мов для кожного з мільйонів файлів документів вам може знадобитися підрахувати кількість лексем у документі. Це паралельно, тому що ви рахуєте жетони, що є однаковою поведінкою для кожного файлу.

Іншими словами, паралелізм - це коли однакова поведінка виконується одночасно. Одночасно означає одночасно, але не обов'язково однакову поведінку. Паралель - це особливий вид одночасності, коли те саме відбувається одночасно.

Наприклад, терміни включатимуть атомні інструкції, критичні розділи, взаємне виключення, очікування закрутки, семафори, монітори, бар'єри, передачу повідомлень, зменшення карти, серцебиття, дзвінок, алгоритми продажу квитків, потоки, MPI, OpenMP.

Робота Грегорі Ендрюса - це головний підручник з нього: багатопотокове, паралельне та розподілене програмування.


1

Чудово, дозвольте мені взяти сценарій, щоб показати, що я розумію. припустимо, є 3 дітки на ім’я: A, B, C. A і B говорять, C слухають. Для A і B вони паралельні: A: Я - A. B: Я - B.

Але для C його мозок повинен пройти паралельний процес, щоб слухати A і B, можливо: я - IA є B.


1

Конкурс простий означає, що виконується кілька завдань (не потрібно паралельно). Наприклад, якщо у нас є 3 завдання, то в будь-який момент часу: більше одного може працювати або всі працювати одночасно.

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


1

Поняття Пайка "одночасність" - це умисне рішення щодо розробки та реалізації. Дизайн програми, сумісний із сумісними технологіями, може демонструвати поведінковий "паралелізм" або не мати його; це залежить від середовища виконання.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.