Паралелізм передбачає одночасність, але не навпаки, правда?


15

Я часто читаю, що паралелізм і одночасність - це різні речі. Дуже часто відповідачі / коментатори йдуть так далеко, як пишуть, що це дві абсолютно різні речі. Але, на мій погляд, вони пов'язані, але я хотів би пояснити це.

Наприклад, якщо я перебуваю на багатоядерному процесорі і вдасться розділити обчислення на x менші обчислення (скажімо, використовуючи fork / join), кожен з яких працює у своїй власній темі, у мене буде програма, яка обидва робить паралельні обчислення (тому що нібито в будь-який момент часу кілька потоків збираються на декількох ядрах) і мають паралельне право?

Хоча якщо я просто використовую, скажімо, Java та маю справу з подіями інтерфейсу та перефарбуваннями на Dispatch Thread Event, а також запускаю єдиний створений ним потік, у мене з’явиться програма, яка є одночасною (EDT + GC thread + моя головна нитка тощо), але не паралельно.

Мені хотілося б знати, чи правильно я це розумію, і якщо паралелізм (за системою «єдиного, але багатоядерного») завжди передбачає одночасність чи ні?

Також, чи багатопотокові програми працюють на багатоядерних процесорах, але де різні потоки роблять абсолютно різні обчислення, які вважаються використаними "паралелізмом"?


Відповіді:


13

За даними Вікіпедії :

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

Тобто паралелізм завжди передбачає одночасність.

Також, чи багатопотокові програми працюють на багатоядерних процесорах, але де різні потоки роблять абсолютно різні обчислення, які вважаються використаними "паралелізмом"?

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

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

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


4
Чудовий пост. Паралелізм - це підмножина Паралельності.

3
Вибачте, але ця відповідь невірна. Ви однозначно можете мати паралелізм без одночасності (наприклад, паралелізм бітового рівня) і насправді ці два поняття є різними. Паралельність - це складання незалежних одиниць страт, тоді як паралелізм - це одночасне виконання потенційно пов'язаних обчислень.
Кай Салегрен

@KaiSellgren: Будь ласка, наведіть джерело, щоб підтримати вашу заяву.
Joonas Pulakka

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

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

3

Код може бути паралельним, але не паралельним.

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


0

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

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

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

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