Parallelität impliziert Parallelität, aber nicht umgekehrt, oder?

15

Ich habe oft gelesen, dass Parallelität und Parallelität verschiedene Dinge sind. Sehr oft gehen die Antwortenden / Kommentatoren so weit zu schreiben, dass es zwei völlig verschiedene Dinge sind. Meiner Meinung nach sind sie miteinander verwandt, aber ich hätte gerne eine Klarstellung.

Wenn ich zum Beispiel auf einer Multi-Core-CPU bin und es schaffe, die Berechnung in x kleinere Berechnungen aufzuteilen (z. B. mit Fork / Join), die jeweils in einem eigenen Thread ausgeführt werden, habe ich ein Programm, das beide parallele Berechnungen ausführt (weil angeblich an einem beliebigen Punkt in der Zeit mehrere Threads werden auf mehrere Kerne laufen) und gleichzeitig richtig sein?

Wenn ich einfach Java verwende und mich mit UI-Ereignissen und Aktualisierungen auf dem Event Dispatch-Thread beschäftige und den einzigen Thread ausführe, den ich selbst erstellt habe, habe ich ein Programm, das gleichzeitig ausgeführt wird (EDT + GC-Thread + mein Hauptthread etc.) aber nicht parallel.

Ich würde gerne wissen, ob ich das richtig hinbekomme und ob Parallelität (auf einem "Single-but-Multi-Cores" -System) immer Parallelität impliziert oder nicht.

Werden Multithread-Programme auch auf einer Mehrkern-CPU ausgeführt, bei denen die verschiedenen Threads jedoch völlig unterschiedliche Berechnungen ausführen, wird dies als "Parallelität" angesehen?

Cedric Martin
quelle

Antworten:

13

Laut Wikipedia :

Paralleles Rechnen ist eine Form der Berechnung, bei der viele Berechnungen gleichzeitig ausgeführt werden. Dabei gilt das Prinzip, dass große Probleme häufig in kleinere Probleme unterteilt werden können, die dann gleichzeitig ("parallel") gelöst werden.

Das heißt, Parallelität impliziert immer Parallelität.

Werden Multithread-Programme auch auf einer Mehrkern-CPU ausgeführt, bei denen die verschiedenen Threads jedoch völlig unterschiedliche Berechnungen ausführen, wird dies als "Parallelität" angesehen?

Nein. Das Wesen der Parallelität besteht darin, dass ein großes Problem in kleinere unterteilt wird, damit die kleineren Teile gleichzeitig gelöst werden können. Die Stücke sind voneinander unabhängig (zumindest bis zu einem gewissen Grad), aber sie sind immer noch Teil des größeren Problems, das jetzt parallel gelöst wird.

Die Essenz der Parallelität besteht darin, dass eine Reihe von Threads (oder Prozessen oder Computern) gleichzeitig etwas tun , möglicherweise (aber nicht unbedingt) in irgendeiner Weise interagieren. Nochmal Wikipedia :

Parallelität ist eine Eigenschaft von Systemen, in denen mehrere Berechnungen gleichzeitig ausgeführt werden und möglicherweise miteinander interagieren.

Joonas Pulakka
quelle
4
Guter Eintrag. Parallelität ist eine Teilmenge der Nebenläufigkeit.
3
Entschuldigung, aber diese Antwort ist falsch. Sie können durchaus Parallelität ohne Parallelität haben (z. B. Parallelität auf Bitebene), und tatsächlich sind die beiden Konzepte verschieden. Bei der Parallelität geht es um das Zusammenstellen unabhängiger Ausführungseinheiten, bei der Parallelität um die gleichzeitige Ausführung potenziell zugeordneter Berechnungen.
Kai Sellgren
@ KaiSellgren: Bitte geben Sie eine Quelle an, um Ihre Aussage zu unterstützen.
Joonas Pulakka
Das erste Wikiquote ist einfach völlig falsch. Glücklicherweise wurde es vor einiger Zeit behoben und jetzt heißt es richtig, dass Parallelität nicht auf Parallelität beruht.
Kai Sellgren
In der Tat, das ist, was der Wiki-Eintrag derzeit sagt ( es ist möglich, Parallelität ohne Parallelität zu haben (wie Parallelität auf Bit-Ebene) ). Aber ich verstehe diesen Punkt überhaupt nicht; Ist Parallelität auf Bit-Ebene nicht das Gleichzeitigste, was man sich vorstellen kann - mehr Operationen mit weniger Befehlen ausgeführt, dann werden einige dieser Operationen nicht innerhalb derselben Anweisung ausgeführt, dh gleichzeitig, dh gleichzeitig?
Joonas Pulakka
3

Code kann gleichzeitig aber nicht parallel sein.

Stellen Sie sich mehrere Threads vor, die auf einem Single-Core-Rechner ausgeführt werden. Diese Single-Core-Maschine verarbeitet jeweils nur einen Thread, sodass keine Parallelität der Vorgänge auftritt. Da das Betriebssystem jedoch mehrere Threads verarbeitet, muss jeder Thread davon ausgehen, dass alle anderen Threads gleichzeitig ausgeführt werden.

Euphorisch
quelle
0

Parallelität bedeutet einfach, viele Aufgaben gleichzeitig zu erledigen. Auf der anderen Seite ist Nebenläufigkeit die Fähigkeit des Kernels, viele Aufgaben auszuführen, indem er ständig zwischen vielen Prozessen wechselt.

Um Parallelität zu erreichen, ist es wichtig, dass das System viele Kerne hat, nur dann kann Parallelität effizient erreicht werden. Die Leistung wird stark beeinträchtigt, und es entsteht viel Overhead, wenn die Parallelität auf einem Single-Core-Rechner versucht wird.

Zum Beispiel hatte ein früheres System nur einen Kern, und CPU-Scheduler gaben eine Illusion von Parallelität, indem sie ständig zwischen Prozessen wechselten und jedem Prozess erlaubten, Fortschritte zu erzielen.

user196279
quelle