Was ist der Unterschied zwischen den Begriffen gleichzeitige und parallele Ausführung? Ich habe den Unterschied nie richtig verstanden.
Das Tag definiert Parallelität als eine Art und Weise, zwei Prozesse gleichzeitig auszuführen, aber ich dachte, Parallelität sei genau dasselbe, dh 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?
Antworten:
Parallelität und Parallelität sind zwei verwandte, aber unterschiedliche Konzepte.
Parallelität bedeutet im Wesentlichen, dass Task A und Task B unabhängig voneinander ausgeführt werden müssen und A ausgeführt wird. Anschließend wird B ausgeführt, bevor A abgeschlossen ist.
Es gibt verschiedene Möglichkeiten, die Parallelität zu erreichen. Eine davon ist die Parallelität, bei der mehrere CPUs gleichzeitig an den verschiedenen Aufgaben arbeiten. Aber das ist nicht der einzige Weg. Eine andere Möglichkeit ist die Taskumschaltung, die folgendermaßen funktioniert: Task A arbeitet bis zu einem bestimmten Punkt, dann stoppt die CPU, die daran arbeitet, und wechselt zu Task B, arbeitet eine Weile daran und wechselt dann zurück zu Task A. Wenn 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.
quelle
Die beiden Konzepte sind verwandt, aber unterschiedlich.
Parallelität bedeutet, dass zwei oder mehr Berechnungen innerhalb desselben Zeitrahmens durchgeführt werden und normalerweise eine gewisse Abhängigkeit zwischen ihnen besteht.
Parallelität bedeutet, dass zwei oder mehr Berechnungen gleichzeitig durchgeführt werden.
Kurz gesagt, Parallelität beschreibt 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 Interleaved Processing (auch bekannt als Coroutines): 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 jedoch auch, dass "Busy Loops" 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.
quelle
Concurrency means that two or more calculations happen within the same time frame, and there is usually some sort of dependency between them.
Aber der Benutzer, der die akzeptierte Antwort geschrieben hat, sagtConcurrency means, essentially, that task A and task B both need to happen independently of each other
. Was ist die Schlussfolgerung?Ich glaube, dass diese Antwort korrekter ist als die vorhandenen Antworten, und wenn sie bearbeitet worden wären, hätte dies 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, des Algorithmus oder des Problems außerhalb der Reihenfolge oder in Teilreihenfolge ausgeführt werden können, ohne das Endergebnis zu beeinflussen 1 2 .
Ein einfaches Beispiel hierfür sind aufeinanderfolgende Ergänzungen:
Aufgrund der kommutativen Zusatzeigenschaft kann deren Reihenfolge ohne Beeinträchtigung der Korrektheit geändert werden; Die folgende Anordnung ergibt die gleiche Antwort:
Hier habe ich Zahlen zu Paaren zusammengefasst, die sich zu 10 summieren, was es mir leichter macht, die richtige Antwort in meinem Kopf zu finden.
Parallel Computing: eine Art der Berechnung , in der viele Berechnungen oder die Ausführung der Prozesse gleichzeitig ausgeführt werden 3 4 . Somit nutzt die Parallelverarbeitung die Eigenschaft der Parallelität, um mehrere Einheiten des Programms, des Algorithmus oder des Problems gleichzeitig auszuführen.
Wenn wir mit dem Beispiel fortlaufender Additionen fortfahren, können wir verschiedene Teile der Summe parallel ausführen:
Am Ende summieren wir dann die Ergebnisse der einzelnen Arbeiter, um sie zu erhalten
10 + 35 = 45
.Auch diese Parallelität war nur möglich, weil aufeinanderfolgende Hinzufügungen die Eigenschaft der Parallelität haben.
Parallelität kann jedoch nicht nur durch Parallelität genutzt werden. Berücksichtigen Sie die Prävention auf einem Single-Core-System: Im Laufe der Zeit kann das System Fortschritte bei mehreren laufenden Prozessen 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.
Verwechslung
Das Obige ist relativ einfach. Ich vermute, dass die Leute verwirrt sind, weil die Wörterbuchdefinitionen nicht unbedingt mit den oben beschriebenen übereinstimmen:
Das Wörterbuch definiert "Parallelität" als eine Tatsache des Auftretens, während die Definition in der Umgangssprache "Computing" 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 unsicher oder irrelevant ist, ob die gleichzeitige Ausführung verwendet wird.
Ich würde daher die Simulation eines Strahltriebwerks auf mehreren Kernen als parallel bezeichnen.
Ich würde Makefiles als Beispiel für Parallelität beschreiben. Makefiles geben die Abhängigkeiten der einzelnen Ziele an. Wenn Ziele von anderen Zielen abhängen, wird eine Teilreihenfolge erstellt. Wenn die Beziehungen und Rezepte umfassend und korrekt definiert sind, liegt die Eigenschaft der Parallelität vor: Es gibt eine Teilreihenfolge, sodass die Reihenfolge bestimmter Aufgaben neu angeordnet werden kann, ohne das Ergebnis zu beeinflussen. Diese Parallelität kann wiederum genutzt werden, um mehrere Regeln gleichzeitig zu erstellen, aber die Parallelität ist eine Eigenschaft des Makefiles, unabhängig davon, ob Parallelität verwendet wird oder nicht.
quelle
Die gleichzeitige Ausführung ist die verallgemeinerte Form der parallelen Ausführung. Zum Beispiel kann das parallele Programm auch als gleichzeitig bezeichnet werden, aber das Gegenteil ist nicht der Fall.
Weitere Informationen finden Sie in diesem Forschungsbericht Konzepte der parallelen Programmierung
quelle
Die parallele Verarbeitung ist eine Teilmenge der gleichzeitigen Verarbeitung.
Die gleichzeitige Verarbeitung beschreibt zwei Aufgaben, die asynchron auftreten, 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. Beispiel: Thread 1 dauert 10 ms, Thread 2 dauert 10 ms usw.
Parallelverarbeitung ist eine Art gleichzeitiger 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.
quelle
Die Aussage von tdammer kommt nahe, der Rest ist alles andere als der springende Punkt. Er sagt:
"Fazit: Parallelität beschreibt 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)."
Analysieren wir einfach die Wörter.
Aktuell bedeutet, dass es jetzt passiert, aktuell, relevant in diesem Moment. Con bedeutet gegen, kontern, nicht ausrichten.
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. Bei parallelen Prozessen wird möglicherweise dieselbe Ressource verwendet, dies wird jedoch nicht als Problem angesehen, sondern ist kein Problem. Mit der Parallelität ist es ein Problem, das behandelt werden muss.
quelle
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. Egal, ob Sie eine Matrixmultiplikation auf einem einzelnen Kern, auf mehreren Kernen oder sogar in der GPU durchführen, das Ergebnis ist dasselbe (oder Ihr Programm ist kaputt). Es fügt keinem Programm neue Funktionen hinzu, nur Geschwindigkeit.
Während es sich bei der Nebenläufigkeit um Dinge handelt, die Sie nicht nacheinander ausführen können. Zum Beispiel 3 verschiedene Webseiten gleichzeitig an 3 Clients liefern, während auf die nächste Anfrage gewartet wird. (Sie können dies jedoch bis zu einem gewissen Grad durch Interleaving simulieren, wie dies in früheren Zeiten der Fall war.) Beachten Sie, dass das Verhalten von gleichzeitigen Programmen nicht deterministisch ist. Es ist beispielsweise nicht klar, welcher der 3 Clients zuerst vollständig bedient wird. Sie könnten einige Tests durchführen und jedes Mal ein anderes Ergebnis in Bezug auf die Bestellung erhalten, wenn die Anfrage abgeschlossen wird. Das Laufzeitsystem sollte sicherstellen, dass a) alle Kunden in angemessener Zeit bedient werden und b).
Normalerweise ist sich das Arbeitspferd einer Parallelberechnung der Parallelität nicht bewusst 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 Sperrmechanismen.
quelle
Meiner Meinung nach gibt es aus Sicht der Anwendungsprogrammierung keinen Unterschied zwischen diesen beiden Konzepten, und es ist verwirrend, zwei Wörter zu haben, um Verwirrung zu stiften. Ich denke, Thread-Interleaving wurde eingeführt, um die Multicore-Verarbeitung zu simulieren, als Multicore noch keine Möglichkeit darstellte. Warum haben wir ein Wort für diese veraltete Denkweise?
Mason Wheeler und Penguin haben die gleiche Antwort gegeben. Ein Core mit Task Switching und / oder Multicore ist gleichzeitig, streng multicore = parallel.
Ich bin der Meinung, dass diese beiden Begriffe in einem zusammengefasst werden sollten, und ich bemühe mich zu vermeiden, "gleichzeitig" zu sagen. Ich denke, auf der OS-Programmierebene ist die Unterscheidung wichtig, aber aus der Sicht des Anwendungsprogrammierers ist es nicht allzu wichtig. Ich habe mapReduce, Spark, MPI, cuda, openCL und multithreaded c ++ geschrieben und musste nie anhalten und überlegen, ob der Job mit verschachtelten Threads oder mit mehreren Kernen ausgeführt wird.
Wenn ich zum Beispiel Multithread-C ++ schreibe, bin ich manchmal nicht sicher, wie viele Kerne ich bekommen werde, obwohl es Möglichkeiten gibt, Anforderungen an die Anzahl der Kerne zu stellen, wie hier beschrieben https://stackoverflow.com/questions/2166425/ wie-man-eine-ac-anwendung-strukturiert-benutzt-einen-multicore-prozessor . Im Funken mache ich einfach Map- und Reduktionsoperationen und habe keine Ahnung, wie der JVM sie auf der Hardware-Ebene handhabt. An GPUs denke ichJeder Thread ist einem eigenen einfachen Prozessor zugeordnet, aber ich synchronisiere meine Threads immer, wenn ein Problem auftritt. Mit MPI wird die Kommunikation zwischen Maschinen explizit spezifiziert, aber wir könnten die Funktionen, die auf mehreren Maschinen ausgeführt werden, auf einem einzigen Kern verschachteln und die Ergebnisse über eine entsprechende Einzelthread-Funktion kombinieren. Und was ist, wenn wir MPI verwenden, um eine Reihe von Single-Core-Maschinen zu koordinieren, jede mit Multithreading? Welchen Unterschied macht es? Ich würde keine sagen. Nenne es alles "parallel" und sei fertig damit.
quelle