it-swarm.com.de

Was ist der Unterschied zwischen Parallelität, Parallelität und asynchronen Methoden?

Bei Concurrency laufen zwei Tasks parallel auf separaten Threads. Asynchrone Methoden werden jedoch parallel ausgeführt, jedoch in demselben Thread. Wie wird das erreicht? Wie steht es mit der Parallelität?

Was sind die Unterschiede zwischen diesen 3 Konzepten?

113
dotnetdev

Concurrent und Parallel sind praktisch das gleiche Prinzip, wie Sie es richtig vermutet haben, beide beziehen sich auf Aufgaben, die gleichzeitig ausgeführt werden, obwohl ich sagen würde, dass parallele Tasks wirklich Multitasking sein sollten, "gleichzeitig ausgeführt", während Concurrent gleichzeitig bedeuten könnte, dass die Tasks sich die Aufgaben teilen Der Ausführungsthread scheint weiterhin parallel ausgeführt zu werden.

Asynchrone Methoden stehen nicht in direktem Zusammenhang mit den beiden vorigen Konzepten. Die Asynchronität wird verwendet, um den Eindruck gleichzeitiger oder paralleler Aufgaben zu vermitteln. In der Regel wird jedoch ein asynchroner Methodenaufruf für einen Prozess verwendet, der die aktuelle Anwendung abarbeiten muss Ich möchte nicht warten und unsere Anwendung auf die Antwort blockieren. 

Das Abrufen von Daten aus einer Datenbank kann beispielsweise Zeit in Anspruch nehmen, aber wir möchten nicht verhindern, dass unsere Benutzeroberfläche auf die Daten wartet. Der async-Aufruf ruft eine Rückrufreferenz ab und kehrt zum Code zurück, sobald die Anforderung an das ferne System gesendet wurde. Ihre Benutzeroberfläche kann weiterhin auf den Benutzer reagieren, während das entfernte System die erforderlichen Verarbeitungsschritte ausführt. Sobald die Daten an Ihre Rückrufmethode zurückgegeben werden, kann diese Methode die Benutzeroberfläche (oder die Übergabe dieser Aktualisierung) nach Bedarf aktualisieren.

Aus der Benutzerperspektive erscheint es wie Multitasking, ist aber möglicherweise nicht der Fall.


BEARBEITEN

Es ist wahrscheinlich wert, hinzuzufügen, dass in vielen Implementierungen ein asynchroner Methodenaufruf dazu führt, dass ein Thread hochgefahren wird. Dies ist jedoch nicht unbedingt erforderlich. Es hängt wirklich davon ab, welche Operation ausgeführt wird und wie die Antwort an das System zurückgemeldet werden kann.

94
Lazarus

Zusamenfassend,

Parallelität bedeutet mehrere Tasks, die in überlappenden Zeiträumen in einer bestimmten Reihenfolge gestartet, ausgeführt und abgeschlossen werden. Parallelität ist, wenn mehrere Tasks OR mehrere Teile einer eindeutigen Task buchstäblich gleichzeitig ausgeführt werden, z. auf einem Multi-Core-Prozessor.

Denken Sie daran, dass Parallelität und Parallelität NICHT dasselbe sind.

Unterschiede zwischen Parallelität und Parallelität

Lassen Sie uns nun bemerkenswerte Unterschiede zwischen Parallelität und Parallelität auflisten.

Parallelität ist, wenn zwei Tasks in überlappenden Zeiträumen gestartet, ausgeführt und abgeschlossen werden können. Parallelität ist, wenn Aufgaben buchstäblich gleichzeitig ausgeführt werden, z. auf einem Multi-Core-Prozessor.

Parallelität ist die Zusammensetzung von unabhängig ausgeführten Prozessen, während Parallelität die gleichzeitige Ausführung von (möglicherweise verwandten) Berechnungen ist.

Parallelität bedeutet, mit vielen Dingen gleichzeitig umzugehen. Parallelität bedeutet, viele Dinge gleichzeitig zu tun.

Eine Anwendung kann gleichzeitig sein, jedoch nicht parallel. Das bedeutet, dass mehr als eine Aufgabe gleichzeitig verarbeitet wird, jedoch nicht zwei Aufgaben gleichzeitig ausgeführt werden.

Eine Anwendung kann parallel sein, jedoch nicht gleichzeitig, was bedeutet, dass sie mehrere Unteraufgaben einer Task in einer Multi-Core-CPU gleichzeitig verarbeitet.

Eine Anwendung kann weder parallel noch parallel sein, dh sie bearbeitet alle Aufgaben nacheinander und sequenziell.

Eine Anwendung kann sowohl parallel als auch gleichzeitig ausgeführt werden. Dies bedeutet, dass mehrere Tasks gleichzeitig in einer Multi-Core-CPU verarbeitet werden.

Parallelität

Parallelität ist im Wesentlichen anwendbar, wenn wir über mindestens zwei sprechen Aufgaben oder mehr. Wenn eine Anwendung zwei Aufgaben ausführen kann praktisch gleichzeitig nennen wir es die gleichzeitige Anwendung. Obwohl hier Tasks laufen wie gleichzeitig, aber im Grunde dürfen sie nicht . Sie nutzen die CPU-Time-Slicing-Funktion des Betriebssystems wo jede Aufgabe einen Teil ihrer Aufgabe ausführt und dann in den Wartezustand wechselt . Wenn sich die erste Task im Wartezustand befindet, wird die CPU der zweiten Task .__ zugewiesen. erledigen es ist Teil der Aufgabe.

Betriebssystem, das auf der Priorität von Aufgaben basiert, weist daher CPU und .__ zu. andere Rechenressourcen, z. Erinnerung; Wenden Sie sich an alle Aufgaben und Geben Sie ihnen die Chance, abzuschließen. Für den Endbenutzer scheint es, dass alle Aufgaben .__ sind. parallel laufen. Dies wird als Parallelität bezeichnet.

Parallelität

Parallelität erfordert nicht zwei Aufgaben. Es wörtlich physisch Teile von Aufgaben OR gleichzeitig ausführen Verwenden der Multi-Core-Infrastruktur der CPU, indem jedem .__ ein Core zugewiesen wird. Aufgabe oder Unteraufgabe.

Parallelität erfordert Hardware mit mehreren Verarbeitungseinheiten im Wesentlichen. In Single-Core-CPUs erhalten Sie möglicherweise Nebenläufigkeit, aber NICHT Parallelität.

Asynchrone Methoden  

Dies hat nichts mit Parallelität und Parallelität zu tun, es wird Asynchronität verwendet um den Eindruck eines gleichzeitigen oder parallelen Taskings darzustellen, aber In der Regel wird ein asynchroner Methodenaufruf normalerweise für einen Prozess verwendet. Das muss von der aktuellen Anwendung abgearbeitet werden und wir tun es nicht Ich möchte warten und unsere Anwendung blockieren, bis die Antwort erwartet wird.

63
Vipin Jain

Concurrency ist, wenn die Ausführung mehrerer Tasks verschachtelt ist, anstatt dass jeder Task nacheinander ausgeführt wird.

Parallelismus ist, wenn diese Aufgaben tatsächlich parallel ausgeführt werden.

 enter image description here


Asynchrony ist ein separates Konzept (auch wenn es in manchen Kontexten verwandt ist). Dies bezieht sich auf die Tatsache, dass ein Ereignis zu einem anderen Zeitpunkt (nicht synchron) zu einem anderen Ereignis stattfindet. Die folgenden Diagramme veranschaulichen den Unterschied zwischen einer synchronen und einer asynchronen Ausführung, wobei die Akteure verschiedenen Threads, Prozessen oder sogar Servern entsprechen können.

 enter image description here

 enter image description here

30
Dimos

Jeder hat Probleme beim Zuordnen von asynchronem zu Parallelismus oder Parallelität, da asynchrones Verhalten weder parallel noch parallel ist. Es ist ein Antonym von Synchronous. Was bedeutet nur, wenn etwas, in diesem Fall, Threads mit etwas anderem synchronisiert werden, in diesem Fall mit einem anderen Thread.

Parallelität

Parallelität bedeutet, dass eine Anwendung zur gleichen Zeit (gleichzeitig) für mehrere Aufgaben Fortschritte erzielt. Wenn der Computer nur über eine CPU verfügt, kann es sein, dass die Anwendung nicht mehr zur gleichen Zeit einen Fortschritt für mehr als eine Aufgabe macht, sondern dass mehr als eine Aufgabe zu einem Zeitpunkt in der Anwendung verarbeitet wird. Eine Aufgabe wird nicht vollständig abgeschlossen, bevor die nächste beginnt.

Parallelität

Parallelität bedeutet, dass eine Anwendung ihre Aufgaben in kleinere Teilaufgaben aufteilt, die parallel bearbeitet werden können, z. B. auf mehreren CPUs gleichzeitig.

Parallelität vs. Parallelität im Detail

Wie Sie sehen, bezieht sich Parallelität darauf, wie eine Anwendung mehrere Aufgaben erledigt, für die sie ausgeführt wird. Eine Anwendung kann eine Aufgabe gleichzeitig (sequentiell) verarbeiten oder an mehreren Aufgaben gleichzeitig (gleichzeitig) arbeiten.

Parallelität hingegen bezieht sich darauf, wie eine Anwendung jede einzelne Aufgabe bearbeitet. Eine Anwendung kann die Aufgabe seriell von Anfang bis Ende bearbeiten oder die Aufgabe in Unteraufgaben aufteilen, die parallel ausgeführt werden können.

Wie Sie sehen, kann eine Anwendung gleichzeitig sein, aber nicht parallel. Dies bedeutet, dass mehrere Aufgaben gleichzeitig verarbeitet werden, die Aufgaben jedoch nicht in Unteraufgaben aufgeteilt werden.

Eine Anwendung kann auch parallel, aber nicht gleichzeitig sein. Dies bedeutet, dass die Anwendung jeweils nur für eine Aufgabe arbeitet und diese Aufgabe in Unteraufgaben aufgeteilt ist, die parallel verarbeitet werden können.

Darüber hinaus kann eine Anwendung weder gleichzeitig noch parallel sein. Dies bedeutet, dass nur jeweils eine Aufgabe ausgeführt wird und die Aufgabe niemals in Unteraufgaben für die parallele Ausführung aufgeteilt wird.

Schließlich kann eine Anwendung auch gleichzeitig und parallel sein, indem sie gleichzeitig an mehreren Aufgaben arbeitet und jede Aufgabe in Unteraufgaben für die parallele Ausführung untergliedert. Einige der Vorteile von Parallelität und Parallelität gehen jedoch möglicherweise in diesem Szenario verloren, da die CPUs im Computer bereits mit Parallelität oder Parallelität einigermaßen beschäftigt sind. Die Kombination kann nur zu einem geringen Leistungsgewinn oder sogar zu einem Leistungsverlust führen. Stellen Sie sicher, dass Sie analysieren und messen, bevor Sie ein paralleles Parallelmodell blind übernehmen.

Von http://tutorials.jenkov.com/Java-concurrency/concurrency-vs-parallelism.html

2
SW DEV07

Parallel: Es ist ein weiter Begriff, der bedeutet, dass zwei Codeteile "zur gleichen Zeit" ausgeführt werden, bis die parallele Ausführung "real" wird. Klingt vage und simpel? Ja. Ich versuche Ihnen dabei zu helfen, sich auf die Unterschiede zwischen diesen Konzepten zu konzentrieren, anstatt jede einzelne technische Definition anzugeben.

Also habe ich "real" geschrieben, weil Parallelität bis zu einem gewissen Grad simuliert werden kann. Viele Systeme, zum Beispiel Spiele, implementieren "parallele" Subsysteme, die während jeder Ausführungsschleife viele Aufgaben ausführen (zum Beispiel: Einige von ihnen verwenden Agenten in großem Umfang), aber die meiste Zeit sind sie nur in dem Sinne parallel, dass sie jeder tut sein kleines Ding in keiner vorhersehbaren Reihenfolge, greift scheinbar zufällig auf Daten zu und selbst wenn Sie eine Art primitiven, softwarebasierten kooperativen Multitasking, um das Ganze zu organisieren, es ist immer noch nicht wirklich parallel. Es ist nur ein sehr kompliziertes sequentielles System.

Sie könnten sagen, dass Parallelität real wird, wenn es ein System von Drittanbietern gibt (unabhängig davon, ob es sich um ein zugrunde liegendes präemptives Betriebssystem handelt, das Threads oder CPU-Kerne anbietet), das speziell dafür ausgelegt ist, Code in Blackboxes auszuführen, die Sie nicht steuern können (mit Ausnahme der Zeit, zu der sie ausgeführt werden) Start und das Ergebnis, das sie produzieren, sowie alle Mutex oder Semaphoren, die Sie möglicherweise einwerfen)

Concurrent: Es kann keine Parallelität ohne Parallelität geben (ob simuliert oder real, wie ich oben erklärt habe), aber dieser Begriff konzentriert sich speziell auf die Tatsache, dass die beiden Systeme versuchen werden, auf die dieselbe Ressource zur selben Zeit zu einem bestimmten Zeitpunkt. Es legt den Schwerpunkt auf die Tatsache, dass Sie sich damit befassen müssen.

Asynchron: Jeder hat Recht, wenn er sagt, dass Asynchronität nichts mit Parallelität zu tun hat, aber es ebnet den Weg dorthin (die Last liegt bei Ihnen, die Dinge parallel zu machen oder nicht - lesen Sie weiter).

Sie können dieses Konzept als einen Weg sehen, Parallelität darzustellen , indem Sie die drei grundlegenden Aspekte der Parallelität formalisieren: 1) Definieren Sie die Initialisierung der Task (sagen Sie, wann sie startet und welche Parameter sie erhält) ), 2) was muss nach dem Beenden gemacht werden und 3) was der Code dazwischen weiter machen soll.

Aber es ist immer noch nur die Syntax (normalerweise wird sie als Rückrufmethode dargestellt). Hinter den Kulissen könnte das zugrunde liegende System einfach entscheiden, dass diese sogenannten "Aufgaben" nur Codefragmente sind, die gestapelt werden müssen, bis der aktuell ausgeführte Code fertig ist. Dann werden sie nacheinander entpackt und nacheinander ausgeführt. Oder nicht. Es kann auch ein Thread pro Task erstellt und parallel ausgeführt werden. Wen interessiert das? Dieser Teil ist nicht im Konzept enthalten;)

1
jeancallisti

Es gibt mehrere Szenarien, in denen Parallelität auftreten kann:

Asynchronie - Dies bedeutet, dass Ihr Programm nicht blockierende Operationen ausführt. Sie kann beispielsweise eine Anforderung für eine Remote-Ressource über HTTP initiieren und dann eine andere Aufgabe ausführen, während sie auf den Empfang der Antwort wartet. Es ist ein bisschen wie wenn Sie eine E-Mail senden und dann Ihr Leben fortsetzen, ohne auf eine Antwort zu warten. 

Parallelität - Dies bedeutet, dass Ihr Programm die Hardware von Multi-Core-Maschinen zur gleichzeitigen Ausführung von Aufgaben nutzt, indem Sie die Arbeit in Aufgaben aufteilen, die jeweils auf einem separaten Kern ausgeführt werden. Es ist ein bisschen wie in der Dusche zu singen: Sie machen eigentlich genau zwei Dinge gleichzeitig.

Multithreading - Dies ist eine Softwareimplementierung, die die gleichzeitige Ausführung verschiedener Threads ermöglicht. Ein Multithread-Programm führt anscheinend mehrere Aktionen gleichzeitig aus, selbst wenn es auf einer Single-Core-Maschine ausgeführt wird. Dies ist ein bisschen wie das Chatten mit verschiedenen Leuten durch verschiedene IM-Fenster; Obwohl Sie tatsächlich hin und her wechseln, führt das Nettoergebnis dazu, dass Sie mehrere Gespräche gleichzeitig führen.

0
Rahul Agarwal

Hier gibt es ein bisschen Semantik zu klären:

Parallelität oder Parallelität ist eine Frage von Ressourcenkonflikten , während es bei Asynchronous um Kontrollfluss geht.

Verschiedene Prozeduren (oder ihre Bestandteile Operationen ) werden als asynchron bezeichnet, wenn die Reihenfolge ihrer Verarbeitung nicht deterministisch implementiert ist. mit anderen Worten, es besteht eine Wahrscheinlichkeit, dass einer von ihnen zu einem bestimmten Zeitpunkt T verarbeitet werden kann. Per Definition ermöglichen mehrere Prozessoren (z. B. CPUs oder Personen), dass mehrere von ihnen gleichzeitig verarbeitet werden können; Auf einem einzelnen Prozessor ist ihre Verarbeitung verschachtelt (z. B. Threads).

Asynchrone Prozeduren oder Operationen werden als gleichzeitig bezeichnet, wenn sie Ressourcen gemeinsam nutzen ; Parallelität ist die definitive Möglichkeit eines Konflikts zu einem bestimmten Zeitpunkt. Die Parallelität ist trivial garantiert, wenn keine Ressourcen gemeinsam genutzt werden (z. B. unterschiedlicher Prozessor und Speicher). Andernfalls muss die Parallelitätskontrolle angesprochen werden.

Daher kann eine asynchrone Prozedur oder Operation parallel oder gleichzeitig mit anderen verarbeitet werden.

0
Evans AB

Hier erkläre ich mit einigen Beispielen

Parallelität

Ein Webservice empfängt viele kleine Anfragen in Echtzeit und muss jede dieser Anfragen anders und unabhängig von anderen Anfragen bearbeiten.

  • viele Aufgaben werden ausgeführt
  • in Echtzeit
  • mit verschiedenen Ausführungssequenzen (es können mehrere Aufgaben oder eine Aufgabe in jedem Aufruf unterschiedlich ausgeführt werden)

  • verkürzt die Reaktionszeit erheblich

Parallelität

A GPU verwendet die parallele Verarbeitung, um denselben Codeblock (AKA Kernel) auf Tausenden von zu verarbeiten physische und logische Threads. Jeder Kernelaufruf verwendet manchmal einen anderen Speicherblock für seine Lese-/Schreiboperationen. Im Idealfall beginnt und endet der Prozess für alle Threads gleichzeitig. Ein einzelner CPU-Kern ohne Hyperthreading kann nicht parallel verarbeitet werden.

  • ein Kernel wird auf mehreren Prozessoren ausgeführt
  • gleichzeitig
  • mit einer einzelnen Ausführungssequenz (es gibt einen Kernel, in dem Verzweigungen oder if vermieden werden)
  • wesentlich erhöht die Geschwindigkeit

Asynchron

Ein schwerer Prozess (wie eine E/A-Operation) kann leicht GUI blockieren, wenn es auf dem GUI-Thread ausgeführt wird. Um I-Reaktionsfähigkeit ​​zu gewährleisten, kann ein schwerer Prozess asynchron ausgeführt werden. Es ist besser, ähnliche asynchrone Vorgänge auszuführen einzeln. z.B. Mehrere IO-gebundene Vorgänge können erheblich langsamer sein, wenn sie gleichzeitig ausgeführt werden. Daher ist es besser, queue sie zu beenden, um zu starten

  • ein Task oder ein Stapel von Tasks wird auf einem anderen Thread ausgeführt
  • einmalig oder einzeln
  • die Ausführungsreihenfolge spielt keine Rolle, da keine Parallelität besteht
  • reduziert im Wesentlichen die Geschwindigkeit, bietet jedoch eine Reaktionsfähigkeit auf einen anderen Thread

Anmerkung:Eine asynchrone Operation, die gleichzeitig ausgeführt wird (d. H. Mehr als einmal gleichzeitig), ist eine gleichzeitige Operation.

0
Bizhan

CONCURRENCY VS PARALLELISM: Gleichzeitigkeit zu einem Zeitpunkt kann nur eine Aufgabe ausgeführt werden. Beispiel: einzelner CPU-Prozessor Parallelität an einem Punkt können wir mehrere Aufgaben ausführen. Beispiel: Dual Core oder Multi Core Prozessor

0
rva