413 Stimmen

Was ist der Unterschied zwischen gleichzeitiger Programmierung und paralleler Programmierung?

Was ist der Unterschied zwischen gleichzeitiger Programmierung und paralleler Programmierung? Ich habe Google befragt, aber nichts gefunden, was mir hilft, diesen Unterschied zu verstehen. Könnten Sie mir ein Beispiel für beides geben?

Für den Moment habe ich diese Erklärung gefunden: http://www.linux-mag.com/id/7411 - aber "Gleichzeitigkeit ist eine Eigenschaft des Programms" im Gegensatz zu "parallele Ausführung ist eine Eigenschaft der Maschine" reicht mir nicht - ich kann immer noch nicht sagen, was was ist.

411voto

J D Punkte 47190

Gleichzeitige Programmierung betrifft Operationen, die sich zu überschneiden scheinen, und befasst sich in erster Linie mit der Komplexität, die durch einen nicht-deterministischen Kontrollfluss entsteht. Die mit nebenläufigen Programmen verbundenen quantitativen Kosten sind in der Regel sowohl der Durchsatz als auch die Latenzzeit. Nebenläufige Programme sind oft IO-gebunden, aber nicht immer, z. B. sind nebenläufige Garbage Collectors vollständig auf der CPU. Das pädagogische Beispiel für ein nebenläufiges Programm ist ein Web-Crawler. Dieses Programm startet Anfragen für Webseiten und nimmt die Antworten gleichzeitig an, sobald die Ergebnisse der Downloads verfügbar sind, wobei eine Reihe von Seiten gesammelt wird, die bereits besucht wurden. Der Kontrollfluss ist nicht deterministisch, da die Antworten nicht notwendigerweise bei jeder Ausführung des Programms in derselben Reihenfolge eingehen. Diese Eigenschaft kann das Debuggen von nebenläufigen Programmen sehr schwierig machen. Einige Anwendungen sind von Grund auf nebenläufig, z. B. müssen Webserver Client-Verbindungen gleichzeitig verarbeiten. Erlang , F# asynchrone Arbeitsabläufe und Scalas Akka Bibliothek sind vielleicht die vielversprechendsten Ansätze für hochgradig gleichzeitige Programmierung.

Multicore-Programmierung ist ein Spezialfall der parallelen Programmierung. Bei der parallelen Programmierung geht es um Operationen, die sich überschneiden, um den Durchsatz zu erhöhen. Die Schwierigkeiten der parallelen Programmierung werden umgangen, indem der Kontrollfluss deterministisch gestaltet wird. In der Regel erzeugen Programme Gruppen von untergeordneten Aufgaben, die parallel ausgeführt werden, und die übergeordnete Aufgabe wird erst fortgesetzt, wenn alle Unteraufgaben abgeschlossen sind. Dadurch sind parallele Programme viel einfacher zu debuggen als nebenläufige Programme. Der schwierige Teil der parallelen Programmierung ist die Leistungsoptimierung im Hinblick auf Aspekte wie Granularität und Kommunikation. Letzteres ist im Zusammenhang mit Multicores immer noch ein Problem, da die Übertragung von Daten von einem Cache zum anderen mit erheblichen Kosten verbunden ist. Die dichte Matrix-Matrix-Multiplikation ist ein pädagogisches Beispiel für parallele Programmierung und kann effizient gelöst werden, indem man Straasens Divide-and-Conquer-Algorithmus verwendet und die Teilprobleme parallel anpackt. Cilk ist vielleicht der vielversprechendste Ansatz für die parallele Hochleistungsprogrammierung auf Multicores und wurde sowohl in Intels Bauklötze mit Gewinde und Microsofts Aufgabe Parallele Bibliothek (in .NET 4).

346voto

Tor Valamo Punkte 31987

Wenn Ihr Programm Threads verwendet (nebenläufige Programmierung), wird es nicht unbedingt als solches ausgeführt (parallele Ausführung), da es davon abhängt, ob der Rechner mehrere Threads verarbeiten kann.

Hier ein anschauliches Beispiel. Threads auf einer ohne Gewinde Maschine:

        --  --  --
     /              \
>---- --  --  --  -- ---->>

Fäden auf einem mit Gewinde Maschine:

     ------
    /      \
>-------------->>

Die Striche stehen für ausgeführten Code. Wie Sie sehen können, werden beide aufgeteilt und separat ausgeführt, aber die Threading-Maschine kann mehrere separate Teile auf einmal ausführen.

180voto

Grigory Kislin Punkte 14348

https://joearms.github.io/published/2013-04-05-concurrent-and-parallel-programming.html

Concurrent = Zwei Warteschlangen und eine Kaffeemaschine.

Parallel = Zwei Warteschlangen und zwei Kaffeemaschinen.

60voto

pspi Punkte 10201

Auslegung der ursprünglichen Frage als parallel/gleichlaufend Berechnung anstelle von Programmierung .

Unter gleichzeitige Berechnung zwei Berechnungen, die beide voranschreiten unabhängig voneinander. Die zweite Berechnung muss nicht warten, bis die erste beendet ist, damit sie fortgesetzt werden kann. Der Mechanismus, wie dies erreicht wird, wird jedoch nicht angegeben. Bei einer Ein-Kern-Konfiguration ist ein Anhalten und Abwechseln zwischen den Threads erforderlich (auch als Präventivmaßnahme Multithreading).

Unter parallele Berechnung zwei Berechnungen, die beide gleichzeitig ablaufen - und zwar buchstäblich zur gleichen Zeit. Dies ist mit einer einzelnen CPU nicht möglich und erfordert stattdessen eine Multi-Core-Einrichtung.

Bilder aus dem Artikel: "Parallel vs. Gleichlauf in Node.js"

suspending and taking turns gegen parallel computing

38voto

mohsen.nour Punkte 972

Aus der Sicht eines Verarbeiters kann es durch dieses Bild beschrieben werden

In the view  from a processor, It can be described by this pic

Aus der Sicht eines Verarbeiters kann es durch dieses Bild beschrieben werden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X