it-swarm.com.de

Der Unterschied zwischen "gleichzeitiger" und "paralleler" Ausführung?

Was ist der Unterschied zwischen den Begriffen gleichzeitig und parallel Ausführung? Ich habe den Unterschied noch nie richtig verstanden.

Das Tag definiert Parallelität als eine Art, zwei Prozesse gleichzeitig auszuführen, aber ich dachte, Parallelität sei genau dasselbe, d. H.: Separate Threads oder Prozesse, die möglicherweise auf separaten Prozessoren ausgeführt werden können.

Wenn wir so etwas wie asynchrone E/A betrachten, haben wir es dann auch mit Parallelität oder Parallelität zu tun?

113
blz

Parallelität und Parallelität sind zwei verwandte, aber unterschiedliche Konzepte.

Parallelität bedeutet im Wesentlichen, dass Aufgabe A und Aufgabe B unabhängig voneinander ausgeführt werden müssen und A gestartet wird und dann B gestartet wird, bevor A beendet ist.

Es gibt verschiedene Möglichkeiten, um Parallelität zu erreichen. Eine davon ist die Parallelität - mehrere CPUs arbeiten gleichzeitig an den verschiedenen Aufgaben. Aber das ist nicht der einzige Weg. Eine andere Möglichkeit ist Taskwechsel, was folgendermaßen funktioniert: Task A arbeitet bis zu einem bestimmten Punkt, dann stoppt die daran arbeitende CPU und schaltet auf Task B um, arbeitet eine Weile daran und dann wechselt zurück zu Aufgabe A. Wenn die Zeitscheiben klein genug sind, scheint es dem Benutzer, dass beide Dinge parallel ausgeführt werden, obwohl sie tatsächlich von einer Multitasking-CPU seriell verarbeitet werden.

105
Mason Wheeler

Die beiden Konzepte sind verwandt, aber unterschiedlich.

Parallelität bedeutet, dass zwei oder mehr Berechnungen innerhalb desselben Zeitrahmens stattfinden und normalerweise eine Art Abhängigkeit zwischen ihnen besteht.

Parallelität bedeutet, dass zwei oder mehr Berechnungen gleichzeitig stattfinden.

Fett ausgedrückt beschreibt Parallelität ein Problem (zwei Dinge müssen zusammen passieren), während Parallelität eine Lösung beschreibt (zwei Prozessorkerne werden verwendet, um zwei Dinge gleichzeitig auszuführen).

Parallelität ist eine Möglichkeit, Parallelität zu implementieren, aber nicht die einzige. Eine andere beliebte Lösung ist die verschachtelte Verarbeitung (a.k.a. Coroutinen): Teilen Sie beide Aufgaben in atomare Schritte auf und wechseln Sie zwischen den beiden hin und her.

Das mit Abstand bekannteste Beispiel für nicht parallele Parallelität ist die Funktionsweise von JavaScript: Es gibt nur einen Thread, und jeder asynchrone Rückruf muss warten, bis der vorherige Codeabschnitt ausgeführt wurde. Dies ist wichtig zu wissen, da es garantiert, dass jede Funktion, die Sie schreiben, atomar ist - kein Rückruf kann sie unterbrechen, bis sie zurückkehrt. Es bedeutet aber auch, dass "Besetzt-Schleifen" nicht funktionieren. Sie können kein Timeout festlegen und dann eine Schleife ausführen, bis sie ausgelöst wird, da die Schleife die Ausführung des Timeout-Rückrufs verhindert.

39
tdammers

Ich glaube, diese Antwort wäre korrekter als die vorhandenen Antworten, und ihre Bearbeitung hätte ihr Wesen verändert. Ich habe versucht, auf verschiedene Quellen oder Wikipedia-Seiten zu verlinken, damit andere die Richtigkeit bestätigen können.


Parallelität: Die Eigenschaft eines Systems, mit der Einheiten des Programms, Algorithmus oder Problems außerhalb der Reihenfolge oder in Teilreihenfolge ausgeführt werden können, ohne dass dies Auswirkungen hat das Endergebnis 12.

Ein einfaches Beispiel hierfür sind aufeinanderfolgende Ergänzungen:

0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

Aufgrund der kommutativen Eigenschaft der Addition kann die Reihenfolge dieser neu angeordnet werden, ohne die Korrektheit zu beeinträchtigen; Die folgende Anordnung führt zur gleichen Antwort:

(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45

Hier habe ich Zahlen zu Paaren zusammengefasst, die sich zu 10 summieren, damit ich leichter die richtige Antwort in meinem Kopf finden kann.

Paralleles Rechnen: eine Art von Berechnung, bei der viele Berechnungen oder die Ausführung von Prozessen gleichzeitig ausgeführt werden 4. Paralleles Rechnen nutzt somit die Eigenschaft der Parallelität, um mehrere Einheiten des Programms, des Algorithmus oder des Problems gleichzeitig auszuführen.

Wenn wir mit dem Beispiel aufeinanderfolgender Additionen fortfahren, können wir verschiedene Teile der Summe parallel ausführen:

Execution unit 1:  0 + 1 + 2 + 3 + 4 = 10
Execution unit 2:  5 + 6 + 7 + 8 + 9 = 35

Am Ende addieren wir dann die Ergebnisse jedes Arbeiters, um 10 + 35 = 45 Zu erhalten.

Auch diese Parallelität war nur möglich, weil aufeinanderfolgende Ergänzungen die Eigenschaft der Parallelität haben.

Parallelität kann jedoch nicht nur durch Parallelität genutzt werden. Betrachten Sie Vorkaufsrecht auf einem Single-Core-System: Im Laufe der Zeit kann das System bei mehreren laufenden Prozessen Fortschritte erzielen, ohne dass einer von ihnen abgeschlossen wird. In der Tat ist Ihr Beispiel für asynchrone E/A ein häufiges Beispiel für Parallelität, für die keine Parallelität erforderlich ist.


Verwirrung

Das Obige ist relativ einfach. Ich vermute, dass die Leute verwirrt sind, weil die Wörterbuchdefinitionen nicht unbedingt mit den oben beschriebenen übereinstimmen:

  • Gleichzeitig: gleichzeitig oder nebeneinander 5.
  • Parallelität: Die Tatsache, dass zwei oder mehr Ereignisse oder Umstände gleichzeitig eintreten oder existieren Aus der Suche auf Google: "Definieren: Parallelität".

Das Wörterbuch definiert "Parallelität" als eine Tatsache des Auftretens, während die Definition in der Umgangssprache eine latente Eigenschaft eines Programms, einer Eigenschaft oder eines Systems ist. Obwohl verwandt, sind diese Dinge nicht dasselbe.


Persönliche Empfehlungen

Ich empfehle, den Begriff "parallel" zu verwenden, wenn die gleichzeitige Ausführung sichergestellt oder erwartet wird, und den Begriff "gleichzeitig" zu verwenden, wenn es ungewiss oder irrelevant ist, ob die gleichzeitige Ausführung verwendet wird.

Ich würde daher die Simulation eines Strahltriebwerks auf mehreren Kernen als parallel beschreiben.

Ich würde Makefiles als Beispiel für Parallelität beschreiben. Makefiles geben die Abhängigkeiten jedes Ziels an. Wenn Ziele von anderen Zielen abhängen, wird eine Teilreihenfolge erstellt. Wenn die Beziehungen und Rezepte umfassend und korrekt definiert sind, wird die Eigenschaft der Parallelität festgelegt: Es gibt eine Teilreihenfolge, sodass die Reihenfolge bestimmter Aufgaben neu angeordnet werden kann, ohne das Ergebnis zu beeinflussen. Auch diese Parallelität kann genutzt werden, um mehrere Regeln gleichzeitig zu erstellen. Die Parallelität ist jedoch eine Eigenschaft des Makefiles, unabhängig davon, ob Parallelität verwendet wird oder nicht.

9
Levi Morrison

Die gleichzeitige Ausführung ist die verallgemeinerte Form der parallelen Ausführung. Zum Beispiel kann ein paralleles Programm auch als gleichzeitig bezeichnet werden, aber umgekehrt ist nicht wahr.

  1. Die gleichzeitige Ausführung ist auf einem einzelnen Prozessor möglich (mehrere Threads, die vom Scheduler verwaltet werden).
  2. Eine parallele Ausführung ist nicht auf einem einzelnen Prozessor, sondern auf mehreren Prozessoren möglich. (Ein Prozess pro Prozessor)

Für Details lesen Sie dieses Forschungspapier Konzepte der gleichzeitigen Programmierung

7
user183296

Die parallele Verarbeitung ist eine Teilmenge der gleichzeitigen Verarbeitung.

Die gleichzeitige Verarbeitung beschreibt zwei Aufgaben, die asynchron ablaufen, dh die Reihenfolge, in der die Aufgaben ausgeführt werden, ist nicht vorbestimmt. Zwei Threads können gleichzeitig auf demselben Prozessorkern ausgeführt werden, indem ausführbare Anweisungen verschachtelt werden. Zum Beispiel läuft Thread 1 für 10 ms, Thread 2 für 10 ms usw.

Die parallele Verarbeitung ist eine Art der gleichzeitigen Verarbeitung, bei der mehr als ein Befehlssatz gleichzeitig ausgeführt wird. Dies können mehrere Systeme sein, die an einem gemeinsamen Problem wie beim verteilten Rechnen arbeiten, oder mehrere Kerne auf demselben System.

3
ConditionRacer

Offensichtlich werden die Begriffe in verschiedenen Kulturen unterschiedlich verwendet.

Mein Verständnis ist das Folgende:

Parallelität ist eine Möglichkeit, die Verarbeitung zu beschleunigen. Unabhängig davon, ob Sie die Matrixmultiplikation auf einem einzelnen Kern, auf mehreren Kernen oder sogar in der GPU durchführen, ist das Ergebnis dasselbe (oder Ihr Programm ist fehlerhaft). Es fügt keinem Programm neue Funktionen hinzu, nur Geschwindigkeit.

Bei Parallelität geht es um Dinge, die Sie nicht nacheinander ausführen können. Beispiel: 3 verschiedene Webseiten gleichzeitig für 3 Clients bereitstellen, während auf die nächste Anforderung gewartet wird. (Sie können dies jedoch bis zu einem gewissen Grad durch Interleaving simulieren, wie dies früher der Fall war.) Beachten Sie, dass das Verhalten gleichzeitiger Programme nicht deterministisch ist. Es ist zum Beispiel nicht klar, welcher der 3 Clients zuerst vollständig bedient wird. Sie könnten einige Tests durchführen und jedes Mal ein anderes Ergebnis bezüglich der Reihenfolge erhalten, in der die Anfrage abgeschlossen wird. Das Laufzeitsystem sollte gewährleisten, dass a) alle Kunden bedient werden und b) in angemessener Zeit.

Normalerweise kennt das Arbeitspferd einer Parallelberechnung Parallelität nicht und kümmert sich auch nicht darum. Bei gleichzeitigen Aufgaben wird häufig explizit die Kommunikation zwischen Prozessen oder Threads verwendet, z. B. das Blockieren von Warteschlangen, die Synchronisierung und das Sperren von Mechanismen.

0
Ingo

Meiner Meinung nach gibt es aus Sicht der Anwendungsprogrammierung keinen Unterschied zwischen diesen beiden Konzepten, und zwei Wörter zu haben, ist aus Gründen der Verwirrung verwirrend. Ich denke, Thread Interleaving wurde eingeführt, um die Multicore-Verarbeitung zu simulieren, als Multicore keine Möglichkeit war. Warum haben wir ein Wort für diese veraltete Denkweise?

Mason Wheeler und Penguin haben die gleiche Antwort gegeben. Ein Core mit Taskwechsel und/oder Multicore ist gleichzeitig, streng multicore = parallel.

Meiner Meinung nach sollten diese beiden Begriffe zu einem zusammengefasst werden, und ich bemühe mich, nicht "gleichzeitig" zu sagen. Ich denke, auf der Ebene der Betriebssystemprogrammierung ist die Unterscheidung wichtig, aber aus Sicht des Anwendungsprogrammierers spielt es keine große Rolle. Ich habe mapReduce, Spark, MPI, cuda, openCL und Multithread-C++ geschrieben und musste nie anhalten und überlegen, ob der Job mit verschachtelten Threads oder mit mehreren Kernen ausgeführt wird.

Wenn ich beispielsweise Multithread-C++ schreibe, bin ich mir manchmal nicht sicher, wie viele Kerne ich erhalten werde, obwohl es Möglichkeiten gibt, Anforderungen an die Anzahl der Kerne zu stellen, die Sie erhalten, wie hier beschrieben https://stackoverflow.com/ Fragen/2166425/How-to-Structure-AC-Anwendung-zur-Verwendung-eines-Multicore-Prozessors . In spark) ordne ich nur Operationen zu und reduziere sie. Ich habe keine Ahnung, wie die JVM sie auf Hardwareebene handhabt. Auf GPUs denke ich Jeder Thread ist einem eigenen einfachen Prozessor zugeordnet, aber ich synchronisiere meine Threads immer dort, wo ein Problem auftreten könnte. Mit MPI wird die Kommunikation zwischen Maschinen explizit angegeben, aber wir könnten verschachteln die Funktionen, die auf mehreren Computern auf einem einzigen Kern ausgeführt werden, und kombinieren die Ergebnisse über eine entsprechende Funktion mit einem einzigen Thread. Und was ist, wenn wir MPI] verwenden, um eine Reihe von Einzelkernmaschinen zu koordinieren, von denen jede über Multithreading verfügt? Welchen Unterschied macht es? Ich würde keinen sagen. Nenne alles "parallel" und sei fertig damit.

0

die Aussage von tdammer kommt nahe, der Rest ist alles andere als der Punkt. Er sagt:

"Mutig ausgedrückt beschreibt Parallelität ein Problem (zwei Dinge müssen zusammen passieren), während Parallelität eine Lösung beschreibt (zwei Prozessorkerne werden verwendet, um zwei Dinge gleichzeitig auszuführen".

Lassen Sie uns einfach die Wörter analysieren.

Aktuell bedeutet, dass es jetzt passiert, aktuell und relevant in diesem Moment. Con bedeutet gegen, gegen, nicht ausgerichtet mit.

Parallel bedeutet in die gleiche Richtung, ohne sich zu kreuzen, ohne sich gegenseitig im Weg zu sein.

Parallelität bedeutet also, um dieselbe Ressource zu konkurrieren. Parallelität nicht. Parallele Prozesse verwenden möglicherweise dieselbe Ressource, dies wird jedoch nicht als Problem angesehen, sondern ist kein Problem. Bei der Parallelität ist dies ein Problem, das behandelt werden muss.

0
Martin Maat

Eine andere gebräuchliche und spezifische Verwendung des Begriffs "parallel" bezieht sich auf Array-Prozessoren. (Die GPU in Ihrem Computer ist ein Paradebeispiel dafür.) Hier sind massiv redundante Recheneinheiten wörtlich = Berechne viele Ergebnisse gleichzeitig.

In diesem Zusammenhang ist "Parallelität" etwas lockerer: Wir Menschen könnten sagen, dass im Laufe der letzten Sekunde viele Aufgaben bearbeitet wurden, so dass sie "gleichzeitig" behandelt wurden, obwohl dies bei jedem der Fall sein kann In bestimmten Nanosekunden wurde tatsächlich nur an einer von ihnen gearbeitet.

Aber auch: "es kommt darauf an." Die beiden Wörter haben die gleiche mgangssprachliche Bedeutung im allgemeinen menschlichen Gespräch. Daher müssen Sie möglicherweise um Klarstellung bitten, um festzustellen, ob eine genauere Bedeutung beabsichtigt war oder nicht.

0
Mike Robinson