it-swarm.com.de

Asynchrone vs. synchrone Ausführung, was bedeutet das wirklich?

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

969
tush1r

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 wechseln, bevor sie abgeschlossen ist.

Dies bedeutet jedoch, dass dies im Zusammenhang mit Computern dazu führt, dass ein Prozess oder eine Aufgabe auf einem anderen "Thread" ausgeführt wird. Ein Thread ist eine Reihe von Befehlen (ein Codeblock), die als Arbeitseinheit vorhanden sind. Das Betriebssystem kann mehrere Threads verwalten und einem Thread einen Teil ("Slice") der Prozessorzeit zuweisen, bevor er zu einem anderen Thread wechselt, um ihm die Arbeit zu ermöglichen. Im Kern (Verzeihung des Wortspiels) kann ein Prozessor einfach einen Befehl ausführen. Er hat kein Konzept, zwei Dinge gleichzeitig auszuführen. Das Betriebssystem simuliert dies durch Zuweisung von Zeitabschnitten an verschiedene Threads.

Wenn Sie nun mehrere Kerne/Prozessoren in den Mix einführen, können 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, dass das Betriebssystem den Abschluss Ihrer Aufgabe verwaltet, während Sie im Code fortfahren und andere Aufgaben ausführen können.

Die asynchrone Programmierung ist ein kompliziertes Thema, da die Dinge miteinander verknüpft werden, wenn sie gleichzeitig ausgeführt werden können. Es gibt zahlreiche Artikel und Bücher zum Thema; Guck mal!

1492
Adam Robinson

Synchron/Asynchron hat nichts mit Multi-Threading zu tun.

Synchron oder Synchronized bedeutet in gewisser Weise "verbunden" oder "abhängig". Mit anderen Worten, zwei synchrone Tasks müssen sich gegenseitig kennen, und eine Task muss auf eine andere Art ausgeführt werden, die von der anderen abhängig ist, z. B. warten, bis die andere Task abgeschlossen ist.
Asynchron bedeutet, dass sie völlig unabhängig sind und keiner der beiden muss in irgendeiner Weise in Betracht gezogen werden, 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 Endpunkt der Aufgaben A, B, C, dargestellt durch <, >-Zeichen.
  • CPU-Zeitscheiben durch vertikale Balken dargestellt |

Technisch gesehen hat das Konzept von synchron/asynchron wirklich hat nichts mit Threads zu tun. Obwohl es im Allgemeinen ungewöhnlich ist, asynchrone Tasks im selben Thread zu finden, ist es möglich (Beispiele siehe unten) und es ist common, zwei oder mehr Tasks zu finden, die synchron auf separate ausgeführt werden. Threads ... Nein, das Konzept von synchron/asynchron hat only damit zu tun, ob eine zweite oder nachfolgende Task initiiert werden kann, bevor die andere (erste) Task abgeschlossen ist oder ob sie warten muss. Das ist alles. Auf welchen Threads (oder Threads) oder Prozessen oder CPUs oder auf welcher Hardware die Task (s) ausgeführt werden, ist nicht relevant. Um dies zu verdeutlichen, habe ich die Grafiken bearbeitet, um dies zu zeigen.

ASYNCHRONES BEISPIEL. Bei der Lösung vieler technischer Probleme ist die Software so konzipiert, dass sie das gesamte Problem in mehrere einzelne Aufgaben aufteilt und diese dann asynchron ausführt. Das Umkehren einer Matrix oder ein Problem der Finite-Elemente-Analyse sind gute Beispiele. Bei der Berechnung ist das Sortieren einer Liste ein Beispiel. Die Schnell-Sortierroutine beispielsweise teilt die Liste in zwei Listen auf und sortiert jede von ihnen, indem sie sich selbst rekursiv aufruft. In den beiden obigen Beispielen können die beiden Tasks asynchron ausgeführt werden (und wurden häufig ausgeführt). Sie müssen nicht auf separaten Threads sein. Sogar eine Maschine mit einer CPU und nur einem Ausführungsthread kann codiert werden, um die Verarbeitung einer zweiten Task zu initiieren, bevor eine erste Task abgeschlossen ist. Das einzige Kriterium ist, dass die Ergebnisse einer Task nicht als Eingaben für die andere Task erforderlich sind. Solange sich die Start- und Endzeiten der Tasks überschneiden (nur möglich, wenn die Ausgabe von keiner als Eingabe für die andere Aufgabe benötigt wird), werden sie asynchron ausgeführt, unabhängig davon, wie viele Threads verwendet werden. 

SYNCHRONES BEISPIEL. Jeder Prozess, der aus mehreren Tasks besteht, bei denen die Tasks nacheinander ausgeführt werden müssen, einer jedoch auf einem anderen Computer ausgeführt werden muss (Abrufen und/oder Aktualisieren von Daten, Einholen eines Aktienkurses von einem Finanzdienstleister usw.). Wenn es sich auf einer separaten Maschine befindet, befindet es sich in einem separaten Thread, entweder synchron oder asynchron.

985
Charles Bretana

Einfacher ausgedrückt:

SYNCHRON

Sie befinden sich in einer Warteschlange, um ein Kinokarte zu erhalten. Sie können keine bekommen, bis alle vor Ihnen eine bekommen, und dasselbe gilt für die Personen, die hinter Ihnen stehen.

ASYNCHRON

Sie sind in einem Restaurant mit vielen anderen Leuten. Sie bestellen Ihr Essen. Andere Leute können ihr Essen auch bestellen, sie müssen nicht warten, bis sie gekocht und serviert werden, bevor sie bestellen können .. In der Küche des Restaurants kochen, servieren und nehmen Bestellungen .. Die Menschen bekommen ihr Essen, sobald es gekocht ist.

556
themightysapien

Einfache Erklärung über Analogie

Synchrone Ausführung

Mein Chef ist ein vielbeschäftigter Mann. Er sagt mir, ich soll den Code schreiben. Ich sage ihm: Gut. Ich fange an und er beobachtet mich wie ein Geier, der hinter mir steht, von meiner Schulter. Ich bin wie "Dude, WTF: Warum gehst du nicht und tust etwas, während ich damit fertig bin?"

er ist wie: "Nein, ich bin warte hier bis du fertig bist." Das ist synchron.

Asynchrone Ausführung

Der Chef sagt mir, ich solle es tun, und anstatt direkt auf meine Arbeit zu warten, geht der Chef los und erledigt andere Aufgaben. Wenn ich meine Arbeit beendet habe, melde ich mich einfach bei meinem Chef und sage: "Ich bin fertig!" Dies ist asynchrone Ausführung.

(Nimm meinen Rat an: NIEMALS mit dem Chef hinter dir arbeiten.)

271
BKSpurgeon

Synchronausführung bedeutet, dass die Ausführung in einer einzigen Serie erfolgt. A->B->C->D. Wenn Sie diese Routinen aufrufen, wird A ausgeführt, dann beendet. Dann wird B gestartet und dann beendet. Dann wird C gestartet.

Mit Asynchron-Ausführung beginnen Sie eine Routine und lassen diese im Hintergrund laufen, während Sie die nächste starten, und sagen Sie irgendwann "Warten Sie, bis dies abgeschlossen ist". Es ist eher so:

StartA->B->C->D->Warten Sie, bis A abgeschlossen ist

Der Vorteil ist, dass Sie B, C und oder D ausführen können, während A noch ausgeführt wird (im Hintergrund in einem separaten Thread), sodass Sie Ihre Ressourcen besser nutzen können und weniger "hängen" oder "warten".

81
Reed Copsey

Synchron bedeutet, dass der Anrufer auf die Antwort oder den Abschluss wartet, asynchron, dass der Anrufer fortfährt und eine Antwort später erfolgt (falls zutreffend).

Als Beispiel:

    static void Main(string[] args)
    {
        Console.WriteLine("Before call");
        doSomething();
        Console.WriteLine("After call");
    }

    private static void doSomething()
    {
        Console.WriteLine("In call");
    }

Dies wird immer ausgegeben:

Before call
In call
After call

Aber wenn wir doSomething asynchron machen würden (mehrere Wege), dann könnte die Ausgabe könnte werden:

Before call
After call
In call

Weil die den asynchronen Aufruf durchführende Methode sofort mit der nächsten Codezeile fortfahren würde. Ich sage "könnte", weil die Reihenfolge der Ausführung bei asynchronen Operationen nicht garantiert werden kann. Es kann auch als Original ausgeführt werden, abhängig von den Thread-Timings usw.

50
Ragoczy

Kurz gesagt, bezieht sich die Synchronisierung auf zwei oder mehrere Prozesse (start und end Punkte), NOT ihre Ausführungen. In diesem Beispiel ist der Endpunkt von Prozess A mit dem Startpunkt von Prozess B synchronisiert:

SYNCHRON
 | -------- A -------- | 
 | -------- B -------- | 

Bei asynchronen Prozessen werden dagegen nicht Start- und Endpunkte synchronisiert:

ASYNCHRON
 | -------- A -------- | 
 | -------- B -------- | 

Wo Prozess A Prozess B überlappt, laufen sie gleichzeitig oder synchron (Wörterbuchdefinition), daher die Verwirrung. 

UPDATE: Charles Bretana verbesserte seine Antwort , daher ist diese Antwort jetzt nur eine einfache (möglicherweise zu vereinfachte) Mnemonik.

44
entr0p3te

Ich denke, das ist eine etwas runde Erklärung, aber es wird immer noch anhand eines Beispiels aus dem echten Leben klarer.

Kleines Beispiel:

Angenommen, das Abspielen eines Audios umfasst drei Schritte:

  1. Den komprimierten Song von der Festplatte bekommen
  2. Dekomprimieren Sie das Audio.
  3. Spielen Sie das unkomprimierte Audio ab.

Wenn Ihr Audioplayer für jeden Song sequenziell einen Schritt 1,2,3 durchführt, ist er synchron. Sie müssen einige Zeit warten, um den Song zu hören, bis der Song tatsächlich abgerufen und dekomprimiert wird.

Wenn Ihr Audioplayer die Schritte 1,2,3 unabhängig voneinander ausführt, ist er asynchron. dh . Wenn Audio 1 abgespielt wird (Schritt 3), wird Audio 3 parallel von der Festplatte abgerufen (Schritt 1) ​​und das Audio 2 wird parallel dekomprimiert. (Schritt 2) Sie hören das Lied, ohne auf Abruf und Dekomprimierung zu warten.

33
aJ.

Einfach gesagt, asynchrone Ausführung macht Sachen im Hintergrund.

Wenn Sie beispielsweise eine Datei aus dem Internet herunterladen möchten, verwenden Sie dazu möglicherweise eine synchrone Funktion, die Ihren Thread jedoch blockiert, bis die Datei vollständig heruntergeladen wurde. Dies kann dazu führen, dass Ihre Anwendung auf keine Benutzereingaben reagiert.

Stattdessen können Sie die Datei mit einer asynchronen Methode im Hintergrund herunterladen. In diesem Fall kehrt die Download-Funktion sofort zurück und die Programmausführung wird normal fortgesetzt. Alle Downloadvorgänge werden im Hintergrund ausgeführt und Ihr Programm wird benachrichtigt, wenn es fertig ist.

20

Wenn Sie eine Sequenz wie: a> b> c> d> ausführen, erhalten Sie während der Ausführung einen Fehler wie:

a
b
c
fail

Dann fangen wir wieder von vorne an:

a
b
c
d

das ist synchron

Wenn wir jedoch die gleiche Sequenz ausführen müssen: a> b> c> d>, haben wir einen Fehler in der Mitte:

a
b
c
fail

... aber anstatt von vorne neu zu starten, starten wir vom Punkt des Scheiterns an:

c
d

... das ist asynchron bekannt.

14
mohamed tharik

Synchronous Programming model - Ein Thread ist einer Aufgabe zugeordnet und beginnt mit der Arbeit. Sobald die Aufgabe abgeschlossen ist, steht sie für die nächste Aufgabe zur Verfügung. In diesem Modell kann die ausführende Aufgabe nicht in der Mitte belassen werden, um eine andere Aufgabe zu übernehmen. Erläutern Sie, wie dieses Modell in Umgebungen mit einem oder mehreren Threads funktioniert.

Single Threaded - Wenn mehrere Aufgaben bearbeitet werden müssen und das aktuelle System nur einen einzelnen Thread bereitstellt, werden dem Thread Aufgaben nacheinander zugewiesen. Es kann bildlich dargestellt werden als
 Synchronous Single Threaded

Multi-Threaded - In dieser Umgebung hatten wir mehrere Threads, die diese Aufgaben übernehmen und damit beginnen können. Dies bedeutet, dass wir über einen Pool von Threads verfügen (neue Threads können auch basierend auf der Anforderung und den verfügbaren Ressourcen erstellt werden) und einer Reihe von Aufgaben. So können diese Threads als solche arbeiten
 Synchronous Multi-Threaded

Asynchrones Programmiermodell - Im Gegensatz zum synchronen Programmiermodell kann ein Thread, sobald er eine Task ausführt, die Task in der Mitte halten, den aktuellen Status speichern und eine andere Task ausführen.

Single Threaded Asynchronous Single Threade

Multi-Threaded Asynchronous Multi-Threaded

Mehr hier - https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/

14
yoAlex5

Als wirklich einfaches Beispiel

SYNCHRON

Stellen Sie sich 10 Schüler vor, die angewiesen sind, als Schlange auf einer Straße zu laufen. 

Die 3. Studentin ließ sich die Schnürsenkel lösen. Jetzt hat sie angehalten und wieder gefesselt.

Alle Schüler hinter ihr haben aufgehört und warten jetzt darauf, dass sie gebunden wird ... Die ersten und zweiten Schüler sind an allen vorbei gegangen und gehen in ihrem üblichen Tempo weiter.

10-->9-->8-->7-->6-->5-->4-->3.     2-->1-->

ASYNCHRON

Stellen Sie sich nur 10 zufällige Personen vor, die auf derselben Straße laufen. Sie stehen natürlich nicht in einer Warteschlange, sondern laufen zufällig an verschiedenen Stellen der Straße in unterschiedlichen Schritten.

Der Schnürsenkel der 3. Person wurde gelöst. Sie blieb stehen, um es wieder zu binden. 

Aber niemand wartet darauf, dass sie gebunden wird. Alle anderen gehen immer noch auf dieselbe Weise wie zuvor, in demselben Tempo.

10-->    9-->
   8--> 7-->   6-->
 5-->  4-->  3. 2-->
1-->
11
Dasun Nirmitha

Sie verwechseln Synchron mit Parallel vs. Serie. Synchron bedeutet alle gleichzeitig. Syncronisierte Mittel beziehen sich auf jedes andere, was in Serie oder in einem festen Intervall gemeint sein kann. Während das Programm alles macht, läuft es in Serie. Holen Sie sich ein Wörterbuch ... aus diesem Grund haben wir ungesüßten Tee. Sie haben Tee oder gesüßten Tee.

7
Joe

Synchron bedeutet im Wesentlichen, dass Sie jeweils nur eine Sache ausführen können. Asynchron bedeutet, dass Sie mehrere Dinge gleichzeitig ausführen können und Sie müssen die Ausführung der aktuellen Sache nicht beenden, um zur nächsten zu gelangen.

6
Mike

Ein synchroner Vorgang führt seine Arbeit aus, bevor er zum Anrufer zurückkehrt.

Eine asynchrone Operation führt (meist oder vollständig) ihre Arbeit aus, nachdem sie zum Aufrufer zurückgekehrt ist. 

4
Maxim Eliseev

Ich habe ein GIF erstellt, um dies zu erklären. Ich hoffe, es ist hilfreich: Schauen Sie, Zeile 3 ist asynchron und andere sind synchron. Alle Zeilen vor Zeile 3 sollten warten, bis Zeile ihre Arbeit beendet hat. Da Zeile 3 jedoch asynchron ist, warten Sie in der nächsten Zeile (Zeile 4) nicht auf Zeile 3, sondern auf Zeile 5, bis Zeile 4 ihre Arbeit beendet hat. und Zeile 6 sollte für 6 auf Zeile 5 und 7 warten, da Zeile 4,5,6,7 nicht asynchron sind.  line 3 is asynchronous and others are synchronous

3

Verwenden Sie ein Beispiel für Anweisungen zum Zubereiten eines Frühstücks

  1. Gießen sie eine tasse kaffee.
  2. Eine Pfanne erhitzen und zwei Eier anbraten.
  3. Drei Scheiben Speck anbraten.
  4. Toasten Sie zwei Stücke Brot.
  5. Fügen Sie Butter und Marmelade zum Toast hinzu.
  6. Gießen Sie ein Glas Orangensaft.

Wenn Sie Erfahrung mit dem Kochen haben, führen Sie diese Anweisungen asynchron aus. Sie würden anfangen, die Pfanne für Eier zu erwärmen, und dann den Speck. Du würdest das Brot in den Toaster geben und dann die Eier anfangen. Bei jedem Schritt des Prozesses würden Sie eine Aufgabe starten und sich dann den Aufgaben zuwenden, die für Ihre Aufmerksamkeit bereit sind.

Das Kochen des Frühstücks ist ein gutes Beispiel für asynchrone Arbeit, die nicht parallel ist. Eine Person (oder ein Thread) kann all diese Aufgaben erledigen. In Fortsetzung der Frühstücksanalogie kann eine Person das Frühstück asynchron zubereiten, indem sie die nächste Aufgabe startet, bevor die erste abgeschlossen ist. Das Kochen schreitet voran, ob es jemand beobachtet oder nicht. Sobald Sie anfangen, die Pfanne für die Eier zu erwärmen, können Sie anfangen, den Speck zu braten. Sobald der Speck anfängt, können Sie das Brot in den Toaster legen.

Für einen parallelen Algorithmus benötigen Sie mehrere Köche (oder Threads). Man würde die Eier machen, man den Speck und so weiter. Jeder würde sich auf genau diese eine Aufgabe konzentrieren. Jeder Koch (oder Faden) wird synchron blockiert und wartet darauf, dass der Speck zum Umdrehen oder der Toast zum Knallen bereit ist.

Referenz aus Asynchrone Programmierkonzepte

1
Hla Min Swe

Ich denke, ein guter Weg, um daran zu denken, ist ein klassisches Relay Race

Synchronous : Prozesse wie Mitglieder desselben Teams werden nicht ausgeführt, bis sie einen Taktstock erhalten (Ende der Ausführung des vorherigen Prozesses/Läufers) und dennoch alle miteinander synchron arbeiten.

Asynchron : Wo Prozesse wie Mitglieder verschiedener Teams auf derselben Staffel-Rennstrecke stattfinden, laufen und stoppen sie asynchron miteinander, jedoch innerhalb desselben Rennens (gesamte Programmausführung).

Macht das Sinn?

1
Sharif

Im Hinblick auf die "zur gleichen Zeit" Definition der synchronen Ausführung (die manchmal verwirrend ist), hier ein guter Weg, um es zu verstehen:

Synchronous Execution : Alle Tasks innerhalb eines Codeblocks werden alle gleichzeitig ausgeführt.

Asynchronous Execution : Alle Tasks in einem Codeblock werden nicht alle gleichzeitig ausgeführt.

1
docta_faustus

Eine andere englische Definition von Synchronize ist Here

Koordinate; kombinieren.

Ich denke, das ist eine bessere Definition als "gleichzeitig geschehen". Das ist auch eine Definition, aber ich glaube nicht, dass es die ist, die zu der Art passt, wie sie in der Informatik verwendet wird.

Eine asynchrone Task ist also nicht mit anderen Tasks koordiniert, während eine synchrone Task IS mit anderen Tasks koordiniert ist. Eine Task endet, bevor eine andere Task startet. 

Wie dies erreicht wird, ist eine andere Frage.

1
Greg Gum

Ja synchron bedeutet gleichzeitig, im wahrsten Sinne des Wortes, alle zusammen zu arbeiten. Mehrere Menschen/Objekte auf der Welt können mehrere Dinge gleichzeitig tun, aber wenn wir einen Computer betrachten, bedeutet dies synchron, dass die Prozesse zusammenarbeiten, dh die Prozesse hängen von der Rückkehr der anderen ab und werden deshalb ausgeführt nach dem anderen in der richtigen Reihenfolge. Während asynchron bedeutet, dass Prozesse nicht zusammenarbeiten, funktionieren sie möglicherweise gleichzeitig (wenn sie sich auf Multithread befinden), arbeiten jedoch unabhängig voneinander. 

0
Saptarshi

Synchron bedeutet, dass eine nacheinander auszuführende Warteschlangenmethode ausgeführt wird. Angenommen, es gibt nur Fahrzeuge, die unter Freunden geteilt werden müssen, um ihr Ziel nacheinander zu erreichen.
Im asynchronen Fall kann jeder Freund ein Fahrzeug mieten und sein Ziel erreichen.

0
Rohit