1361 Stimmen

Asynchrone und synchrone Ausführung, was ist der Hauptunterschied?

Was ist der Unterschied zwischen asynchroner und synchroner Ausführung?

0 Stimmen

... oder "sequentielle vs. parallele" Ausführung ... obwohl echte Parallelität mehrere Kerne erfordert, ansonsten ist es logisch verschachtelt.

12 Stimmen

Früher habe ich beide Begriffe verwechselt, und um mir den Unterschied zu merken, habe ich das erste "A" in " A JAX" steht für asynchron, in JavaScript werden Anfragen mit AJAX in einer Schleife ausgeführt, ohne dass sie aufeinander warten oder den Prozess blockieren, da der Browser die Benutzererfahrung nicht durch eine eingefrorene Website beeinträchtigen will. Alle Anfragen werden fast gleichzeitig gesendet, ohne die Antwort der vorherigen Anfrage abzuwarten. Das bedeutet asynchrone

1 Stimmen

Nun, ich glaube nicht, dass die Antworten die ursprüngliche Motivation für die Terminologie erklären. Aber hier ist meine Meinung nach dem, was ich bisher erfahren habe: synchron - Handeln auf der Grundlage eines Zeitpunkts, wie z.B. das Ende eines Timeouts. asynchron - Handeln auf der Grundlage eines Ereignisses, das unabhängig von der Zeit eintritt Diese Begriffe ergeben so gesehen viel Sinn. Allerdings wird die Bedeutung von "synchron" in diesem speziellen Kontext verdreht.

1944voto

Adam Robinson Punkte 176996

Wenn Sie etwas synchron ausführen, warten Sie, bis es beendet ist, bevor Sie mit einer anderen Aufgabe fortfahren. Wenn Sie etwas asynchron ausführen, können Sie zu einer anderen Aufgabe übergehen, bevor diese beendet ist.

Im Zusammenhang mit Computern bedeutet dies, dass ein Prozess oder eine Aufgabe auf einem anderen "Thread" ausgeführt wird. Ein Thread ist eine Reihe von Befehlen (ein Codeblock), der als Arbeitseinheit existiert. Das Betriebssystem kann mehrere Threads verwalten und einem Thread einen Teil ("slice") der Prozessorzeit zuweisen, bevor es zu einem anderen Thread wechselt, um diesem die Arbeit zu überlassen. Im Kern (entschuldigen Sie das Wortspiel) kann ein Prozessor einfach einen Befehl ausführen, er hat kein Konzept, zwei Dinge gleichzeitig zu tun. Das Betriebssystem simuliert dies, indem es den verschiedenen Threads Zeitabschnitte zuweist.

Wenn Sie nun mehrere Kerne/Prozessoren in den Mix einbringen, dann KÖNNEN die Dinge tatsächlich gleichzeitig passieren. Das Betriebssystem kann einem Thread auf dem ersten Prozessor Zeit zuweisen und dann denselben Zeitblock einem anderen Thread auf einem anderen Prozessor zuweisen. Bei all dem geht es darum, dem Betriebssystem die Möglichkeit zu geben, die Erledigung Ihrer Aufgabe zu verwalten, während Sie mit Ihrem Code weitermachen und andere Dinge tun können.

Asynchrone Programmierung ist ein kompliziertes Thema, denn es geht um die Semantik, wie Dinge miteinander verknüpft werden können, wenn man sie gleichzeitig ausführen kann. Es gibt zahlreiche Artikel und Bücher zu diesem Thema; schauen Sie mal rein!

1280voto

Charles Bretana Punkte 137391

Synchron/Asynchron hat NICHTS mit MULTI-THREADING zu tun.

Synchrone oder Synchronisiert bedeutet "verbunden" oder in irgendeiner Weise "abhängig". Mit anderen Worten: Zwei synchrone Aufgaben müssen voneinander wissen, und eine Aufgabe muss in irgendeiner Weise von der anderen abhängig sein, z. B. muss sie warten, bis die andere Aufgabe beendet ist.
Asynchron bedeutet, dass sie völlig unabhängig voneinander sind und keiner den anderen in irgendeiner Weise berücksichtigen muss, weder bei der Initiierung noch bei der Ausführung.

Synchron (ein Thread):

1 thread ->   |<---A---->||<----B---------->||<------C----->|

Synchron (Multithreading):

thread A -> |<---A---->|   
                        \  
thread B ------------>   ->|<----B---------->|   
                                              \   
thread C ---------------------------------->   ->|<------C----->| 

Asynchron (ein Thread):

         A-Start ------------------------------------------ A-End   
           | B-Start -----------------------------------------|--- B-End   
           |    |      C-Start ------------------- C-End      |      |   
           |    |       |                           |         |      |
           V    V       V                           V         V      V      
1 thread->|<-A-|<--B---|<-C-|-A-|-C-|--A--|-B-|--C-->|---A---->|--B-->| 

Asynchron (Multi-Threaded):

 thread A ->     |<---A---->|
 thread B ----->     |<----B---------->| 
 thread C --------->     |<------C--------->|
  • Start- und Endpunkte der Aufgaben A, B, C dargestellt durch < , > Zeichen.
  • CPU-Zeitabschnitte, dargestellt durch vertikale Balken |

Technisch gesehen ist das Konzept der Synchronität/Asynchronität hat nichts mit Fäden zu tun . Obwohl es im Allgemeinen ungewöhnlich ist, dass asynchrone Aufgaben auf demselben Thread laufen, ist es möglich (Beispiele siehe unten) und es ist gemeinsame um zwei oder mehr Aufgaben zu finden, die synchron auf getrennt Threads... Nein, das Konzept der Synchronität/Asynchronität hat zu tun mit ausschließlich damit, ob eine zweite oder nachfolgende Aufgabe begonnen werden kann, bevor die andere (erste) Aufgabe abgeschlossen ist, oder ob sie warten muss. Das ist alles. Welcher Thread (oder Threads), welche Prozesse, welche CPUs oder welche Hardware die Aufgabe(n) ausführt, ist nicht relevant. Um dies zu verdeutlichen, habe ich die Grafiken entsprechend angepasst.


ASYNCHRONES BEISPIEL:

Bei der Lösung vieler technischer Probleme ist die Software darauf ausgelegt, das Gesamtproblem in mehrere Einzelaufgaben aufzuteilen und diese dann asynchron auszuführen. Das Invertieren einer Matrix oder ein Problem der Finite-Elemente-Analyse sind gute Beispiele. In der Datenverarbeitung ist das Sortieren einer Liste ein Beispiel. Die Quicksort-Routine teilt die Liste in zwei Listen auf und führt eine Quicksortierung auf jeder dieser Listen durch, wobei sie sich selbst rekursiv aufruft (Quicksort). In beiden obigen Beispielen können die beiden Aufgaben asynchron ausgeführt werden (und wurden es auch oft). Sie müssen nicht in getrennten Threads ausgeführt werden. Selbst eine Maschine mit einer CPU und nur einem Ausführungsstrang kann so programmiert werden, dass die Verarbeitung einer zweiten Aufgabe beginnt, bevor die erste abgeschlossen ist. Das einzige Kriterium ist, dass die Ergebnisse der einen Aufgabe sind nicht als Input für die andere Aufgabe erforderlich . Solange sich die Start- und Endzeiten der Aufgaben überschneiden (was nur möglich ist, wenn die Ausgabe der einen als Eingabe für die andere benötigt wird), werden sie asynchron ausgeführt, unabhängig davon, wie viele Threads verwendet werden.

SYNCHRONES BEISPIEL:

Jeder Prozess, der aus mehreren Aufgaben besteht, die nacheinander ausgeführt werden müssen, von denen eine jedoch auf einem anderen Rechner ausgeführt werden muss (Abrufen und/oder Aktualisieren von Daten, Abrufen eines Aktienkurses von einem Finanzdienst usw.). Wenn sie auf einem separaten Rechner ausgeführt wird, dann in einem separaten Thread, egal ob synchron oder asynchron.

722voto

themightysapien Punkte 8051

Vereinfacht ausgedrückt:

SYNCHRONOUS

Sie stehen in einer Warteschlange, um eine Kinokarte zu kaufen. Sie können erst eine bekommen, wenn alle vor Ihnen eine bekommen haben, und das Gleiche gilt für die Leute hinter Ihnen.

ASYNCHRONOUS

Sie befinden sich in einem Restaurant mit vielen anderen Menschen. Sie bestellen Ihr Essen. Andere Personen können ebenfalls ihr Essen bestellen, sie müssen nicht warten, bis Ihr Essen gekocht und Ihnen serviert wurde, bevor sie bestellen können. In der Küche des Restaurants wird ständig gekocht, serviert und Bestellungen entgegengenommen. Die Gäste bekommen ihr Essen serviert, sobald es fertig gekocht ist.

407voto

BenKoshy Punkte 29349

Einfache Erläuterung durch Analogie

Angry employee

(die Geschichte und die Bilder sollen Ihnen helfen, sich zu erinnern).

Synchrone Ausführung

Mein Chef ist ein vielbeschäftigter Mann. Er sagt mir, ich soll Code schreiben. Ich sage ihm das: Gut. Ich fange an und er beobachtet mich wie ein Geier, steht hinter mir und schaut mir über die Schulter. Ich sage: "Alter, WTF: Warum gehst du nicht und machst etwas, während ich das hier fertig mache?"

sagt er: "Nein, ich bin und wartet genau hier bis du fertig bist." Dies ist ein synchroner Vorgang.

Asynchrone Ausführung

Der Chef sagt mir, ich solle es tun, und anstatt dort auf meine Arbeit zu warten, geht der Chef weg und erledigt andere Aufgaben. Wenn ich mit meiner Arbeit fertig bin, melde ich mich einfach bei meinem Chef und sage: "Ich bin FERTIG!" Das ist asynchrone Ausführung.

(Nehmen Sie meinen Ratschlag an: Arbeiten Sie NIEMALS mit dem Chef hinter sich).

97voto

Reed Copsey Punkte 536986

Synchrone Ausführung bedeutet, dass die Ausführung in einer einzigen Serie erfolgt. A->B->C->D . Wenn Sie diese Routinen aufrufen, A wird ausgeführt, dann beendet, dann B beginnt, dann endet, dann C startet, usw.

Avec Asynchrone Ausführung Sie beginnen eine Routine und lassen sie im Hintergrund laufen, während Sie die nächste starten, um dann irgendwann zu sagen: "Warten Sie, bis sie beendet ist". Es ist mehr wie:

Start A->B->C->D-> Warten pour A zu beenden

Der Vorteil ist, dass Sie B , C , und oder D während A noch läuft (im Hintergrund, auf einem separaten Thread), so dass Sie Ihre Ressourcen besser nutzen können und weniger "Hänger" oder "Wartezeiten" haben.

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