Bei der Parallelität werden zwei Aufgaben parallel auf separaten Threads ausgeführt. Asynchrone Methoden werden jedoch parallel ausgeführt, jedoch auf demselben 1 Thread. Wie wird das erreicht? Und was ist mit Parallelität?
Was sind die Unterschiede zwischen diesen 3 Konzepten?
multithreading
asynchronous
concurrency
GurdeepS
quelle
quelle
Antworten:
Concurrent und Parallel sind praktisch das gleiche Prinzip, wie Sie richtig vermuten. Beide beziehen sich auf Aufgaben, die gleichzeitig ausgeführt werden, obwohl ich sagen würde, dass parallele Aufgaben wirklich Multitasking sein sollten, "gleichzeitig" ausgeführt, während Concurrent bedeuten könnte, dass sich die Aufgaben die Aufgaben teilen Ausführungsthread, während er scheinbar parallel ausgeführt wird.
Asynchrone Methoden stehen nicht in direktem Zusammenhang mit den beiden vorherigen Konzepten. Asynchronität wird verwendet, um den Eindruck eines gleichzeitigen oder parallelen Taskings zu vermitteln. Effektiv wird jedoch normalerweise ein asynchroner Methodenaufruf für einen Prozess verwendet, der außerhalb der aktuellen Anwendung arbeiten muss, und wir tun dies nicht Ich möchte nicht warten und unsere Anwendung blockieren, bis die Antwort vorliegt.
Das Abrufen von Daten aus einer Datenbank kann beispielsweise einige Zeit dauern, wir möchten jedoch nicht verhindern, dass unsere Benutzeroberfläche auf die Daten wartet. Der asynchrone Aufruf verwendet eine Rückrufreferenz und gibt die Ausführung an Ihren Code zurück, sobald die Anforderung an das Remote-System gesendet wurde. Ihre Benutzeroberfläche kann weiterhin auf den Benutzer reagieren, während das Remote-System die erforderliche Verarbeitung ausführt. Sobald die Daten an Ihre Rückrufmethode zurückgegeben werden, kann diese Methode die Benutzeroberfläche aktualisieren (oder diese Aktualisierung übergeben).
Aus Anwendersicht erscheint es wie Multitasking, ist es aber möglicherweise nicht.
BEARBEITEN
Es ist wahrscheinlich erwähnenswert, dass in vielen Implementierungen ein asynchroner Methodenaufruf dazu führt, dass ein Thread hochgefahren wird. Dies ist jedoch nicht unbedingt erforderlich. Dies hängt wirklich von der ausgeführten Operation ab und davon, wie die Antwort an das System zurückgemeldet werden kann.
quelle
Zusamenfassend,
Parallelität bedeutet mehrere Aufgaben, die in überlappenden Zeiträumen in keiner bestimmten Reihenfolge gestartet, ausgeführt und ausgeführt werden. Parallelität liegt vor, wenn mehrere Aufgaben ODER mehrere Teile einer eindeutigen Aufgabe buchstäblich gleichzeitig ausgeführt werden, z. B. auf einem Multi-Core-Prozessor.
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 Aufgaben 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.
Bei der Parallelität geht es darum, viele Dinge gleichzeitig zu erledigen. Bei Parallelität geht es darum, viele Dinge gleichzeitig zu tun.
Eine Anwendung kann gleichzeitig ausgeführt werden - jedoch nicht parallel. Dies bedeutet, dass mehr als eine Aufgabe gleichzeitig verarbeitet wird, jedoch keine zwei Aufgaben gleichzeitig ausgeführt werden.
Eine Anwendung kann parallel sein - aber nicht gleichzeitig. Dies bedeutet, dass mehrere Unteraufgaben einer Aufgabe gleichzeitig in einer Mehrkern-CPU verarbeitet werden.
Eine Anwendung kann weder parallel noch gleichzeitig sein, dh sie verarbeitet alle Aufgaben nacheinander nacheinander.
Eine Anwendung kann sowohl parallel als auch gleichzeitig ausgeführt werden. Dies bedeutet, dass mehrere Aufgaben gleichzeitig in einer Mehrkern-CPU verarbeitet werden.
Parallelität
Parallelität
Asynchrone Methoden
quelle
Parallelität ist, wenn die Ausführung mehrerer Aufgaben verschachtelt wird, anstatt dass jede Aufgabe nacheinander ausgeführt wird.
Parallelität ist, wenn diese Aufgaben tatsächlich parallel ausgeführt werden.
Asynchronität ist ein separates Konzept (obwohl es in einigen Kontexten verwandt ist). Es bezieht sich auf die Tatsache, dass ein Ereignis möglicherweise zu einem anderen Zeitpunkt (nicht synchron) als ein anderes Ereignis auftritt. Die folgenden Diagramme veranschaulichen den Unterschied zwischen einer synchronen und einer asynchronen Ausführung, bei der die Akteure verschiedenen Threads, Prozessen oder sogar Servern entsprechen können.
quelle
Jeder hat Probleme, Asynchronität entweder mit Parallelität oder Parallelität zu verknüpfen, da Asynchronität kein Antonyme für Parallelität oder Gleichzeitigkeit ist. Es ist ein Antonyme von Synchronous. Dies zeigt nur an, ob etwas, in diesem Fall Threads, mit etwas anderem synchronisiert wird, in diesem Fall einem anderen Thread.
quelle
Es gibt verschiedene Szenarien, in denen Parallelität auftreten kann:
Asynchronität - Dies bedeutet, dass Ihr Programm nicht blockierende Vorgänge ausführt. Beispielsweise kann es eine Anforderung für eine Remote-Ressource über HTTP initiieren und dann eine andere Aufgabe ausführen, während es auf den Empfang der Antwort wartet. Es ist ein bisschen so, als würden 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 nutzt, um Aufgaben gleichzeitig auszuführen, indem die Arbeit in Aufgaben aufgeteilt wird, die jeweils auf einem separaten Kern ausgeführt werden. Es ist ein bisschen wie unter der Dusche zu singen: Sie machen tatsächlich zwei Dinge genau zur gleichen Zeit.
Multithreading - Dies ist eine Software-Implementierung, mit der verschiedene Threads gleichzeitig ausgeführt werden können. Ein Multithread-Programm scheint mehrere Dinge gleichzeitig zu tun, selbst wenn es auf einem Single-Core-Computer ausgeführt wird. Dies ist ein bisschen wie das Chatten mit verschiedenen Personen über verschiedene IM-Fenster. Obwohl Sie tatsächlich hin und her wechseln, ist das Nettoergebnis, dass Sie mehrere Gespräche gleichzeitig führen.
quelle
Von http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html
quelle
Parallel:Es ist ein weit gefasster Begriff, der bedeutet, dass zwei Codeteile dies "gleichzeitig" ausführen. Es spielt keine Rolle, ob es sich um "echte" Parallelität handelt oder ob es sich um ein cleveres Designmuster handelt. Der Punkt ist, dass Sie die "Aufgaben" gleichzeitig starten und dann separat steuern können (mit Mutex und allen entsprechenden Tricks). Normalerweise bevorzugen Sie es jedoch, das Wort "parallel" nur für "echte" Parallelität zu verwenden, wie in: Sie ermöglichen dies durch nicht kooperatives Multitasking (sei es über CPU- / GPU-Kerne oder nur auf Softwareebene, indem Sie das Betriebssystem es verwalten lassen auf einem sehr niedrigen Niveau). Die Leute zögern, "parallel" zu sagen, nur für komplizierten sequentiellen Code, der Parallelität vortäuscht, wie Sie es beispielsweise im Javascript eines Browserfensters finden würden. Daher der Grund, warum die Leute in diesem Thread sagen "asynchron hat nichts mit Parallelität zu tun". Nun ja, aber verwirren Sie sie einfach nicht.
Gleichzeitig: 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 irgendwann versuchen werden, gleichzeitig auf dieselbe Ressource zuzugreifen . Es legt den Schwerpunkt auf die Tatsache, dass Sie sich damit befassen müssen.
Asynchron : Jeder hat Recht, wenn er sagt, dass Asynchron nichts mit Parallelität zu tun hat, aber es ebnet den Weg dorthin (die Last liegt bei Ihnen, Dinge parallel zu machen oder nicht - lesen Sie weiter).
"Asynchron" bezieht sich auf eine Darstellung der Parallelität, die die drei grundlegenden Dinge formalisiert, die normalerweise mit der Parallelität verbunden sind: 1) Definieren Sie die Initialisierung der Aufgabe (sagen Sie, wann sie beginnt und welche Parameter sie erhält), 2) was nach dem Ende getan werden muss und 3) Was der Code dazwischen weiter machen soll.
Aber es ist immer noch nur Syntax (normalerweise wird es als Rückrufmethode dargestellt). Hinter den Kulissen kann das zugrunde liegende System einfach entscheiden, dass diese sogenannten "Aufgaben" nur Codefragmente sind, die sich stapeln, bis der Code ausgeführt ist, den es gerade ausführt. Und dann werden sie einzeln entstapelt und nacheinander ausgeführt. Oder nicht. Es kann auch ein Thread pro Aufgabe erstellt und parallel ausgeführt werden. Wen interessiert das? Dieser Teil ist nicht im Konzept enthalten;)
quelle
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 den Kontrollfluss geht .
Verschiedene Prozeduren (oder ihre konstituierenden Operationen ) werden als asynchron bezeichnet, wenn die Reihenfolge ihrer Verarbeitung nicht deterministisch implementiert ist . Mit anderen Worten, es besteht die Wahrscheinlichkeit, dass einer von ihnen zu einem bestimmten Zeitpunkt verarbeitet werden kann. T. Per Definition ermöglichen mehrere Prozessoren (z. B. CPUs oder Personen), dass mehrere von ihnen gleichzeitig verarbeitet werden. 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 von Konflikten zu einem bestimmten Zeitpunkt. T. Parallelität ist trivial garantiert, wenn keine Ressourcen gemeinsam genutzt werden (z. B. unterschiedlicher Prozessor und Speicher). Andernfalls muss die Parallelitätskontrolle behandelt werden.
Daher kann eine asynchrone Prozedur oder Operation parallel oder gleichzeitig mit anderen verarbeitet werden.
quelle
Parallelität bedeutet, mehrere Aufgaben gleichzeitig auszuführen, jedoch nicht unbedingt gleichzeitig. Wenn Sie mehr als eine Aufgabe ausführen müssen, aber nur eine Ressource haben, streben wir die Parallelität an. In einer Single-Core-Umgebung wird die Parallelität durch Context Switching erreicht.
Parallelität ist wie das gleichzeitige Ausführen mehrerer Aufgaben, bei denen Sie gemeinsam singen und baden können. Jetzt erledigen Sie die Aufgabe parallel.
Asynchron ist etwas, das mit der Thread-Ausführung im asynchronen Modell zusammenhängt, wenn eine Aufgabe ausgeführt wird. Sie können zu einer anderen Aufgabe wechseln, ohne auf den Abschluss der vorherigen Aufgabe zu warten.
Die asynchrone Programmierung hilft uns, Parallelität zu erreichen. Asynchrone Programmierung in einer Multithread-Umgebung ist ein Weg, um Parallelität zu erreichen.
quelle
"Sync und Async sind Programmiermodelle. Gleichzeitig und parallel werden Aufgaben ausgeführt ...". Quelle: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66
Mit anderen Worten, Sync und Async beschreiben, wie Ihr Programm ausgeführt wird, wenn ein Funktionsaufruf ausgeführt wird (wird es warten oder wird es weiterhin ausgeführt?), Während Concurrent und Parallel beschreiben, wie eine Funktion (eine Aufgabe) ausgeführt wird (Concurrent = möglicherweise ausgeführt bei gleichzeitig parallel = effektiv zur gleichen Zeit ausgeführt).
quelle
KONKURRENZ GEGEN PARALLELISMUS: Parallelität zu einem bestimmten Zeitpunkt kann nur eine Aufgabe ausgeführt werden. Beispiel: Parallelität eines einzelnen CPU-Prozessors an einem Punkt können wir mehrere Aufgaben ausführen. Beispiel: Dual-Core- oder Multi-Core-Prozessor
quelle
Hier erkläre ich mit einigen Beispielen
Parallelität
Eine GPU verwendet die Parallelverarbeitung, um denselben Codeblock (AKA- Kernel ) auf Tausenden von physischen und logischen Threads zu verarbeiten. Im Idealfall beginnt und endet der Prozess für alle Threads gleichzeitig. Ein einzelner CPU-Kern ohne Hyperthreading kann keine parallele Verarbeitung durchführen.
Hinweis: Ich sagte im Idealfall, dass beim Ausführen eines Kernels mit einer Größe von 7 Millionen Aufrufen auf einer Hardware mit 6 Millionen Threads zweimal derselbe Code auf allen 6 Millionen Threads parallel ausgeführt werden muss, während jedes Mal alle 6 Millionen Threads verbraucht werden.
Hinweis: Die Parallelität ist nicht auf die GPU beschränkt.
Parallelität
Ein Webdienst empfängt viele kleine Anfragen in Echtzeit und muss jede dieser Anfragen jederzeit und unabhängig von anderen Anfragen oder internen Jobs unterschiedlich behandeln. Sie möchten jedoch, dass der Webdienst jederzeit betriebsbereit ist, ohne den Datenstatus oder den Systemzustand zu beeinträchtigen.
Stellen Sie sich vor, ein Benutzer aktualisiert einen Datensatz und ein anderer Benutzer löscht denselben Datensatz gleichzeitig.
Hinweis : Diese Anforderungen verbrauchen normalerweise einige wichtige Ressourcen wie Speicher, Datenbankverbindung oder Bandbreite. Sie möchten jedoch, dass der Webdienst jederzeit reagiert. Asynchronität ist der Schlüssel, um darauf zu reagieren , nicht auf Parallelität
Asynchron
Ein schwerer Prozess (wie eine E / A-Operation) kann die GUI leicht blockieren, wenn sie auf dem GUI-Thread ausgeführt wird. Um die Reaktionsfähigkeit der Benutzeroberfläche zu gewährleisten , kann ein schwerer Prozess asynchron ausgeführt werden. Es ist besser , ähnlich Asynchron - Operationen auszuführen einen nach dem anderen . Beispielsweise können mehrere E / A-gebundene Vorgänge erheblich langsamer sein, wenn sie gleichzeitig ausgeführt werden. Es ist daher besser, sie zum Starten in die Warteschlange zu stellen
Hinweis: Eine asynchrone Operation, die gleichzeitig ausgeführt wird (dh mehr als einmal gleichzeitig), ist eine gleichzeitige Operation.
Hinweis: Parallelität und Asynchronität werden häufig miteinander verwechselt. Parallelität bezieht sich auf verschiedene Teile des Systems, die zusammenarbeiten, ohne sich gegenseitig zu stören (diese Probleme werden häufig mit Sperren, Semaphoren oder Mutexen gelöst). Durch Asynchronität erreichen Sie Reaktionsfähigkeit (z. B. Threading).
* Hinweis: Asynchronität und Multithreading werden häufig miteinander verwechselt. Asynchroner Code beinhaltet nicht unbedingt einen neuen Thread. Es kann sich um eine Hardware-Operation handeln oder, wie Stephan es nennt, um eine reine Operation. Lesen Sie dies
Beispiel: Im folgenden WPF + C # -Code
await Task.Run(()=> HeavyMethod(txt))
wird ein Asynchronitätsproblem gelöst, währendtextBox.Dispatcher.Invoke
ein Parallelitätsproblem gelöst wird:quelle
Ich werde es kurz und interessant machen, Ihren Kopf um diese Konzepte zu wickeln.
Concurrent vs. Parallel - Möglichkeiten, wie Aufgaben ausgeführt werden.
Synchron vs. Asynchron - Programmiermodelle.
quelle