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


177

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?


8
Der Begriff "asynchron" kann viele verschiedene Dinge bedeuten. Diese Begriffe sind verwandt, beschreiben jedoch keine disjunkten Mengen von Dingen. Die Bedeutungen überschneiden sich und variieren je nach Situation.
Pointy

2
Bei der ersten Parallelität werden also zwei oder mehr Prozesse gleichzeitig ausgeführt. Wenn dies aus dem Weg ist, ist es nicht parallel, gleichzeitig zu sein. Parallele Prozesse erfordern zwei oder mehr Kerne, während gleichzeitige Prozesse einen einzelnen Kern zeitlich gemeinsam nutzen können.
Rick O'Shea

Antworten:


139

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.


34
Ich würde argumentieren, dass Sie Parallelität und Parallelität in Ihrem ersten Absatz verwechselt haben. Parallelität bezieht sich auf die Verwaltung mehrerer Ausführungsthreads, wobei Parallelität genauer gesagt mehrere Ausführungsthreads gleichzeitig ausgeführt werden. Parallelität ist der umfassendere Begriff, der Parallelität umfassen kann.
Mark H

7
Obwohl die beiden Wörter sehr ähnlich sind und verwechselt werden können (und dies häufig sind), haben sie unterschiedliche Definitionen: Concurrent = Existing, Happening oder gleichzeitig. Parallel = von oder in Bezug auf die scheinbare oder tatsächliche Leistung von mehr als einem Vorgang gleichzeitig durch dasselbe oder verschiedene Geräte. Wie Sie sehen können, bedeutet parallel nicht unbedingt gleichzeitig, sondern kann nur als gleichzeitig erscheinen. Am Ende des Tages werden die Wörter oft synonym verwendet und mit n dev ist ein Raum, den Sie wahrscheinlich n + 1 Definitionen erhalten;)
Lazarus

3
@Mehrdad Wenn Sie Ihre Definitionen von Wörterbuchwörtern auf deren Verwendung in Marketingmaterialien stützen wollen, werden Sie wahrscheinlich einen Nachteil haben.
Lazarus

6
Falsch. Im Zusammenhang mit der Programmierung, Parallelität ist die Fähigkeit des Codes „zusammengesetzt“ in den Bits der Logik zu sein, könnte zugleich ausgeführt werden. Parallelität (in Kombination mit Parallelität) bedeutet, dass der Code auf einem 100-Core-Computer ausgeführt wird.
Frank Radocaj

2
@FrankRadocaj hat es richtig. Gleichzeitig bedeutet, dass das Programm in Einheiten (Einheiten, die im Wesentlichen Threads sind) aufgeteilt werden kann, die in beliebiger Reihenfolge ausgeführt werden können und ein bestimmtes Ergebnis haben. Parallel bedeutet, dass diese Einheiten / Threads buchstäblich gleichzeitig auf mehreren Prozessoren ausgeführt werden.

89

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.

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 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 ist im Wesentlichen anwendbar, wenn wir über mindestens zwei Aufgaben oder mehr sprechen. Wenn eine Anwendung zwei Aufgaben praktisch gleichzeitig ausführen kann, wird sie als gleichzeitige Anwendung bezeichnet. Obwohl hier Aufgaben gleichzeitig ausgeführt werden, können sie im Wesentlichen nicht. Sie nutzen die CPU-Time-Slicing-Funktion des Betriebssystems, bei der jede Aufgabe einen Teil ihrer Aufgabe ausführt und dann in den Wartezustand wechselt. Wenn sich die erste Aufgabe im Wartezustand befindet, wird die CPU der zweiten Aufgabe zugewiesen, um ihren Teil der Aufgabe abzuschließen.

Das Betriebssystem, das auf der Priorität der Aufgaben basiert, weist somit CPU und andere Computerressourcen zu, z. B. Speicher; Wende dich allen Aufgaben zu und gib ihnen die Chance, sie zu erledigen. Für den Endbenutzer scheinen alle Aufgaben parallel ausgeführt zu werden. Dies wird als Parallelität bezeichnet.

Parallelität

Für die Parallelität sind keine zwei Aufgaben erforderlich. Es führt buchstäblich Teile von Aufgaben ODER mehrere Aufgaben gleichzeitig physisch aus, wobei die Mehrkerninfrastruktur der CPU verwendet wird, indem jeder Aufgabe oder Unteraufgabe ein Kern zugewiesen wird.

Parallelität erfordert im Wesentlichen Hardware mit mehreren Verarbeitungseinheiten. In einer Single-Core-CPU kann es zu Parallelität, aber NICHT zu Parallelität kommen.

Asynchrone Methoden

Dies hängt nicht mit Parallelität und Parallelität zusammen. Asynchronität wird verwendet, um den Eindruck eines gleichzeitigen oder parallelen Tasking zu vermitteln. Effektiv wird jedoch normalerweise ein asynchroner Methodenaufruf für einen Prozess verwendet, der außerhalb der aktuellen Anwendung arbeiten muss und nicht möchte Warten Sie und blockieren Sie unsere Anwendung, bis die Antwort vorliegt.


2
Sehr hilfreich. Danke
Neha

Ich bin immer noch verwirrt über Async und Parallelität. Ich habe den Ausdruck "Aufgaben asynchron ausführen" und "Aufgaben gleichzeitig ausführen" verwendet. Das asynchrone Ausführen von Aufgaben und das gleichzeitige Ausführen von Aufgaben scheinen dasselbe zu bedeuten?
Moondra

1
Die @ Moonra Async-Task wird in einem einzelnen Thread ausgeführt, der nichts mit Multithreading zu tun hat. Eine asynchrone Aufgabe sendet eine Aufgabe an einen externen Prozess außerhalb Ihrer Anwendung ... dh Datenbank, Dateireader ... Dies sind E / A-Prozesse. Anschließend wird dem Prozess ein Rückruf hinzugefügt, um eine Aktion auszuführen, wenn der E / A-Prozess abgeschlossen ist. Ich bin mir nicht sicher, ob es in einer Programmiersprache einige "asynchrone" Funktionen gibt, die beim Aufrufen einer asynchronen Aufgabe einen separaten neuen Thread erstellen. Ich habe gehört, dass C # eine ist, bin mir aber nicht sicher
Tobi Owolawi

56

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.

Geben Sie hier die Bildbeschreibung ein


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.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


6
Einfache, effektive Illustration.
Kontaktmatt

1
Ist Parallelität dasselbe wie Asynchronität?
Nr.

1
Diese beiden Konzepte sind zwar sehr nahe beieinander, aber nicht gleich. In der Praxis hängt die Asynchronität eher mit der Interaktion zwischen Aktionen (z. B. A & B) zusammen, bei der eine (B) von der anderen (A) ausgelöst wird und ob die zweite auf die erste wartet, bis sie abgeschlossen ist. Parallelität ist ein allgemeinerer Begriff für Aktionen, die auch nicht miteinander in Beziehung stehen können und unabhängig davon, ob sie nacheinander ausgeführt werden oder ob ihre Ausführungen verschachtelt sind.
Dimos

1
Bei Asynchronität geht es also hauptsächlich um Blockieren und Nicht-Blockieren
Daniel

15

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.


12

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.


Das sind wirklich gute Analogien! Vielen Dank. Wäre es fair zu sagen, dass Parallelität mit Ihrer Multithreading-Definition definiert werden kann? Also Parallelität = Multithreading auf einem Single-Core, das so aussieht, als ob es zur gleichen Zeit passiert, aber wirklich sehr schnell hin und her wechselt?
Wongz

3

Parallelität

Parallelität bedeutet, dass eine Anwendung bei mehreren Aufgaben gleichzeitig (gleichzeitig) Fortschritte macht. Wenn der Computer nur über eine CPU verfügt, führt die Anwendung möglicherweise nicht genau zur gleichen Zeit Fortschritte bei mehr als einer Aufgabe aus, sondern es werden mehr als eine Aufgabe gleichzeitig in der Anwendung verarbeitet. Eine Aufgabe wird nicht vollständig abgeschlossen, bevor die nächste beginnt.

Parallelität

Parallelität bedeutet, dass eine Anwendung ihre Aufgaben in kleinere Unteraufgaben aufteilt, die parallel verarbeitet werden können, beispielsweise auf mehreren CPUs gleichzeitig.

Parallelität vs. Parallelität im Detail

Wie Sie sehen können, hängt die Parallelität damit zusammen, wie eine Anwendung mehrere Aufgaben verarbeitet, an denen sie arbeitet. Eine Anwendung kann jeweils eine Aufgabe (nacheinander) verarbeiten oder gleichzeitig (gleichzeitig) an mehreren Aufgaben arbeiten.

Parallelität hängt dagegen davon ab, wie eine Anwendung jede einzelne Aufgabe behandelt. Eine Anwendung kann die Aufgabe von Anfang bis Ende seriell verarbeiten oder die Aufgabe in Unteraufgaben aufteilen, die parallel ausgeführt werden können.

Wie Sie sehen, kann eine Anwendung gleichzeitig, aber nicht parallel ausgeführt werden. Dies bedeutet, dass mehrere Aufgaben gleichzeitig verarbeitet werden, die Aufgaben jedoch nicht in Unteraufgaben unterteilt sind.

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 unterteilt ist, die parallel verarbeitet werden können.

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

Schließlich kann eine Anwendung auch gleichzeitig und parallel sein, da sie gleichzeitig mehrere Aufgaben bearbeitet und jede Aufgabe für die parallele Ausführung in Unteraufgaben unterteilt. Einige der Vorteile von Parallelität und Parallelität können in diesem Szenario jedoch verloren gehen, da die CPUs im Computer bereits ausreichend mit Parallelität oder Parallelität allein 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


3

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;)


2

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.


2

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.


2

"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).


Medium ist keine Quelle, es ist ein Artikel von jemand anderem, der über sein (falsches) Verständnis eines Themas spricht, es macht ihn / sie nicht zu einer Autorität.
Moha das allmächtige Kamel

1
Es ist ein Zitat, daher die Quelle. Die meisten Antworten hier werden von den Behörden in keinem Bereich verfasst, und die Erklärung des Autors ist gut genug.
Pedro Boechat

Bei stackoverflow haben Sie mindestens ein Abstimmungssystem und es ist eine Community von Fachleuten. Jeder kann alles auf Medium schreiben. Es ist kein fairer Vergleich zwischen den beiden.
Moha das allmächtige Kamel

1
Hier kann auch jeder etwas schreiben, ich weiß nicht, warum Sie sich für Medium entscheiden. Wie auch immer, ich bin ein professioneller Programmierer und unterstütze dieses Verständnis. Und ich finde es elegant, weil es relativ kurz ist.
Pedro Boechat

Das Problem ist nicht, dass Medium eine schlechte Quelle ist, das Problem ist, dass eine Antwort, die lediglich auf eine externe Seite verweist, keine Antwort ist. Sie könnten diese Antwort erheblich verbessern, wenn Sie den zitierten Teil näher erläutern oder den Inhalt des Artikels zusammenfassen, anstatt nur darauf zu verlinken.
David Schwartz

1

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


1

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.

  • Ein Kernel (ein Stück Code) wird auf mehreren Prozessoren ausgeführt
  • gleichzeitig
  • mit einer einzigen Ausführungssequenz (ein Kernel muss in allen Threads dasselbe tun, daher werden "Verzweigungen" oder "Wenn" vermieden, da sie die Ressourcen drastisch verbrauchen, indem sie viele NOPs (No-Operations) erstellen, um alle Threads zu synchronisieren).
  • erhöht die Geschwindigkeit im Wesentlichen drastisch
  • schränkt drastisch ein, was Sie tun können
  • hängt stark von der Hardware ab

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.

  • Viele Aufgaben werden ausgeführt
  • in Echtzeit (oder wann immer eine Anfrage kommt)
  • mit unterschiedlichen Ausführungssequenzen (im Gegensatz zum Kernel in der Parallelverarbeitung können gleichzeitige Aufgaben unterschiedliche Aufgaben ausführen, die Sie höchstwahrscheinlich in die Warteschlange stellen oder priorisieren müssen).
  • Verbessert im Wesentlichen die durchschnittliche Antwortzeit, da Aufgabe 2 nicht auf den Abschluss von Aufgabe 1 warten muss
  • Im Wesentlichen wird die Rechenzeit geopfert, da viele Aufgaben gleichzeitig ausgeführt werden und nur begrenzte Ressourcen zur Verfügung stehen
  • muss gemeinsam genutzte Ressourcen ordnungsgemäß verwalten, damit keine Deadlocks auftreten oder die Daten beschädigt werden.

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

  • Eine Aufgabe oder ein Stapel von Aufgaben wird in einem anderen Thread ausgeführt
  • einmal
  • Wenn es eine Aufgabe gibt, gibt es keine Sequenz, also warten Sie entweder, bis sie beendet ist, oder Sie feuern und vergessen
  • Wenn es sich um eine Reihe von Aufgaben handelt, können Sie entweder alle gleichzeitig abfeuern und vergessen, warten, bis alle abgeschlossen sind, oder jede Aufgabe ausführen, um zu beginnen
  • reduziert im Wesentlichen die Leistung aufgrund des Overheads
  • Bietet Reaktionsfähigkeit auf einen anderen Thread (wirksam gegen das Blockieren des UI-Threads oder anderer wichtiger Threads)

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ährend textBox.Dispatcher.Invokeein Parallelitätsproblem gelöst wird:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}

0

Ich werde es kurz und interessant machen, Ihren Kopf um diese Konzepte zu wickeln.

Concurrent vs. Parallel - Möglichkeiten, wie Aufgaben ausgeführt werden.

Nehmen Sie ein Beispiel aus dem wirklichen Leben: Es gibt eine Herausforderung, bei der Sie sowohl einen ganzen großen Kuchen essen als auch ein ganzes Lied singen müssen. Sie werden gewinnen, wenn Sie der Schnellste sind, der das ganze Lied singt und den Kuchen beendet. So die Regel ist , dass Sie singen und essen gleichzeitig . Wie Sie das machen, gehört nicht zur Regel. Sie können den ganzen Kuchen essen, dann das ganze Lied singen, oder Sie können einen halben Kuchen essen, dann ein halbes Lied singen, dann das noch einmal tun usw.

Parallelität ist eine bestimmte Art von Parallelität, bei der Aufgaben tatsächlich gleichzeitig ausgeführt werden. In der Informatik kann Parallelität nur in Multicore-Umgebungen erreicht werden.

Synchron vs. Asynchron - Programmiermodelle.

Bei der Synchronisierung schreiben Sie Code als Schritte, die der Reihe nach von oben nach unten ausgeführt werden. In einem asynchronen Programmiermodell schreiben Sie Code als Aufgaben, die dann gleichzeitig ausgeführt werden. Die gleichzeitige Ausführung bedeutet, dass wahrscheinlich alle Aufgaben gleichzeitig ausgeführt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.