Asynchrone oder synchrone Ausführung, was bedeutet das wirklich? [geschlossen]

1186

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

tush1r
quelle
... oder "sequentielle vs parallele" Ausführung ... obwohl echte Parallelität mehrere Kerne erfordert, ist sie ansonsten logisch verschachtelt.
Samis
8
Früher habe ich beide Begriffe verwechselt, und um mich an den Unterschied zu erinnern, habe ich das erste "A" in " A JAX", das für asynchron steht, in JavaScript geworfen , wenn Sie Anforderungen mit AJAX in einer Schleife ausführen, auf die sie nicht warten einander oder blockieren den Prozess, da der Browser die Benutzererfahrung mit einer eingefrorenen Website nicht beeinträchtigen möchte, werden alle Anfragen fast gleichzeitig gesendet, ohne auf die Antwort der vorherigen Anfrage zu warten. Das ist asynchron
Buchhalter

Antworten:

1747

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

Im Kontext von Computern bedeutet dies jedoch, dass ein Prozess oder eine Aufgabe in 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") Prozessorzeit zuweisen, bevor er zu einem anderen Thread wechselt, um ihm die Möglichkeit zu geben, einige Arbeiten auszuführen. Im Kern (entschuldigen Sie das Wortspiel) kann ein Prozessor einfach einen Befehl ausführen. Er hat nicht das Konzept, zwei Dinge gleichzeitig zu tun. Das Betriebssystem simuliert dies, indem es verschiedenen Threads Zeitscheiben zuweist.

Wenn Sie nun mehrere Kerne / Prozessoren in den Mix einführen, 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 zu ermöglichen, die Ausführung Ihrer Aufgabe zu verwalten, während Sie in Ihrem Code fortfahren und andere Dinge tun können.

Asynchrone Programmierung ist ein kompliziertes Thema, da die Semantik der Zusammenhänge besteht, wenn Sie sie gleichzeitig ausführen können. Es gibt zahlreiche Artikel und Bücher zu diesem Thema; Guck mal!

Adam Robinson
quelle
246
Was mich absolut verwirrt, ist, dass synchron "zur gleichen Zeit" bedeutet, aber wenn es im obigen Sinne verwendet wird, bedeutet es sequentiell und asynchron bedeutet "nicht zur gleichen Zeit" ... ?? Kann jemand diesen Konflikt erklären?
Damien Roche
45
@ Zenph: In diesem Zusammenhang geht es um einen ganzen Codeblock. Synchron bedeutet, dass der Block gleichzeitig ausgeführt wird (obwohl die Komponenten ja nacheinander ausgeführt werden). Asynchron bedeutet, dass nicht alle Blöcke gleichzeitig ausgeführt werden.
Adam Robinson
8
Die asynchrone Ausführung erfolgt auch, wenn ein Programm eine Nachricht an eine Warteschlange sendet (wie in Nachrichtensystemen wie ActiveMQ, WebSphere MQ, HornetQ, MSMQ usw.). In diesem Fall umfasst der asynchrone Aufruf keine Multithread-Programmierung oder Behandlung der Parallelität auf Betriebssystemebene.
Paulo Merson
287
Seltsamerweise bedeutet "synchron" "dieselbe Uhr verwenden". Wenn also zwei Befehle synchron sind, verwenden sie dieselbe Uhr und müssen nacheinander ausgeführt werden. "Asynchron" bedeutet "nicht dieselbe Uhr verwenden", daher geht es den Anweisungen nicht darum, miteinander Schritt zu halten. Deshalb schaut es rückwärts, der Begriff bezieht sich nicht auf die Anweisungsbeziehung zueinander. Es bezieht sich auf jede Anweisungsbeziehung zur Uhr. Ich hoffe, das hilft.
Tom Padilla
14
Die Begriffe stammen aus dem Ingenieurwesen. en.wikipedia.org/wiki/Asynchronous_system
Tom Padilla
1151

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

Synchron oder synchronisiert bedeutet "verbunden" oder "abhängig" in irgendeiner Weise. Mit anderen Worten, zwei synchrone Aufgaben müssen sich gegenseitig bewusst sein, und eine Aufgabe muss auf eine Weise ausgeführt werden, die von der anderen abhängig ist, z. B. warten, bis die andere Aufgabe abgeschlossen ist.
Asynchron bedeutet, dass sie völlig unabhängig 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 (Multithread):

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 (Multithread):

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

Technisch gesehen hat das Konzept von synchron / asynchron wirklich nichts mit Threads zu tun . Obwohl es im Allgemeinen ungewöhnlich ist, asynchrone Aufgaben zu finden, die auf demselben Thread ausgeführt werden, ist es möglich (Beispiele siehe unten), und es ist üblich , zwei oder mehr Aufgaben zu finden, die synchron auf separaten Threads ausgeführt werden ... Nein, das Konzept von synchron / asynchron zu tun hat , nur mit , ob eine zweite oder nachfolgende Aufgabe kann vor dem anderen (ersten) Aufgabe begonnen werden abgeschlossen ist , oder ob sie warten müssen. Das ist alles. Welcher Thread (oder welche Threads) oder Prozesse oder CPUs oder tatsächlich 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 darauf ausgelegt, das Gesamtproblem in mehrere einzelne Aufgaben aufzuteilen und diese dann asynchron auszuführen. Das Invertieren einer Matrix oder ein Problem der Finite-Elemente-Analyse sind gute Beispiele. Beim Rechnen ist das Sortieren einer Liste ein Beispiel. Die Quicksort-Routine teilt beispielsweise die Liste in zwei Listen auf und führt für jede eine Quicksortierung durch, wobei sie sich selbst (Quicksort) rekursiv aufruft. In beiden obigen Beispielen können (und wurden) die beiden Aufgaben asynchron ausgeführt. Sie müssen sich nicht in separaten Threads befinden. Sogar eine Maschine mit einer CPU und nur einem Ausführungsthread kann codiert werden, um die Verarbeitung einer zweiten Aufgabe zu initiieren, bevor die erste abgeschlossen ist. Das einzige Kriterium ist, dass die Ergebnisse einer Aufgabe nicht als Eingaben für die andere Aufgabe erforderlich sind. Solange sich Start- und Endzeit der Aufgaben überschneiden (nur möglich, wenn die Ausgabe von keiner 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, bei denen die Aufgaben nacheinander ausgeführt werden müssen, eine jedoch auf einem anderen Computer ausgeführt werden muss (Daten abrufen und / oder aktualisieren, einen Börsenkurs vom Finanzdienstleister erhalten usw.). Wenn es sich auf einem separaten Computer befindet, befindet es sich auf einem separaten Thread, egal ob synchron oder asynchron.

Charles Bretana
quelle
92
Warum in aller Welt bedeuten Wörter verschiedene Dinge im Computer? Lassen Sie mich immer wieder darauf zurückkommen ... aus dem Wörterbuch ... synchron: gleichzeitig auftreten. asynchron: tritt nicht gleichzeitig auf.
Muhammad Umer
17
aber wie Sie in Computern sehen können, bedeutet es das Gegenteil
Muhammad Umer
5
Vielleicht basiert die Nomenklatur darauf, ob die Initiierung von Aufgaben mit der Erledigung anderer Aufgaben "synchronisiert" ist?
Charles Bretana
11
@MuhammadUmer: In der Computerwelt wird das gleichzeitige Auftreten als Parallelität bezeichnet.
Roy Ling
5
IMHO beschreiben diese Bilder nicht alle die synchrone oder asyklonale Ausführung von Aufgaben. Das zweite Bild impliziert beispielsweise, dass asynchrone Aufgaben mehrere Threads erfordern. Eigentlich nicht. Und diese Aufgaben müssen parallel ausgeführt werden, was ebenfalls keine Voraussetzung ist. Oder das Bild für "synchron" zeigt sehr gut, wie Aufgaben asynchron von einer Anrufstelle aus versendet wurden und jetzt in einem seriellen Taskplaner ausgeführt werden;) IMO, die Bilder sind irreführend.
CouchDeveloper
642

Einfacher ausgedrückt:

SYNCHRON

Sie stehen in einer Warteschlange, um eine Kinokarte zu erhalten. Sie können keinen bekommen, bis jeder vor Ihnen einen bekommt, und das gilt auch für die Leute, die sich hinter Ihnen in der Warteschlange befinden.

ASYNCHRON

Sie sind mit vielen anderen Menschen in einem Restaurant. Sie bestellen Ihr Essen. Andere Leute können auch ihr Essen bestellen, sie müssen nicht warten, bis Ihr Essen gekocht und Ihnen serviert wird, bevor sie bestellen können. In der Küche kochen, servieren und nehmen die Mitarbeiter ständig Bestellungen entgegen. Die Leute bekommen ihr Essen serviert, sobald es gekocht ist.

themightysapien
quelle
10
Wenn jemand Äpfel im Vergleich zu Äpfeln will; Wenn Sie möchten, dass das Restaurantszenario synchron ist, müssen alle anderen im Restaurant, wenn Sie Essen bestellen, auf das Eintreffen Ihres Essens warten, bevor sie ihr Essen bestellen können. Nun scheint dies ein wirklich dummes Szenario zu sein. In der Computerwelt könnte dieses Szenario jedoch nützlich sein. Angenommen, jeder Kunde kann nicht entscheiden, was er möchte, und stattdessen prüfen, was der vorherige Kunde bestellt, um zu entscheiden, ob er dies wünscht oder nicht. Dann ist es sinnvoll, dass er vor der Bestellung auf das Eintreffen des Essens warten muss.
Fonix
Nur zum Hinzufügen ... es könnte sein, dass die Operationen wie in einer Warteschlange in asynchronen Operationen ausgeführt werden ... Aber das ist überhaupt nicht obligatorisch.
Sreekanth Karumanaghat
5
sehr einfaches und reales Beispiel
Manish
Um Ihr Beispiel noch weiter voranzutreiben, könnten sie mehrere Tore für den Verkauf von Tickets in Betracht ziehen. Daher kann jede Leitung asynchron von der anderen Leitung aus arbeiten, jedoch synchron in sich selbst!
Saeed Ahadian
334

Einfache Erklärung in 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 einen Geier, der hinter mir von meiner Schulter steht. Ich bin wie "Alter, WTF: Warum gehst du nicht und machst etwas, während ich das beende?"

Er sagt: "Nein, ich warte hier, bis du fertig bist." Das ist synchron.

Asynchrone Ausführung

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

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

BKSpurgeon
quelle
28
Ich bin fertig ... es ist noch lustiger, wenn Sie dies als Rücktritt betrachten.
Daedric
91

Synchrone Ausführung bedeutet, dass die Ausführung in einer einzigen Reihe erfolgt. A->B->C->D. Wenn Sie diese Routinen aufrufen, Awerden sie ausgeführt, dann beendet, dann Bgestartet, dann beendet, dann Cgestartet usw.

Bei der asynchronen Ausführung beginnen Sie eine Routine und lassen sie im Hintergrund laufen, während Sie die nächste starten. Sagen Sie dann irgendwann "Warten Sie, bis dies abgeschlossen ist". Es ist eher wie:

Start A->B->C->D->Warten für Abis Ende

Der Vorteil ist , dass Sie ausführen können B, Cund oder Dwährend Anoch (im Hintergrund, auf einem separaten Thread) ausgeführt wird , so dass Sie besser nutzen Sie Ihre Ressourcen nehmen und weniger „hängt“ oder „wartet“ haben.

Reed Copsey
quelle
@ Reed Copsey ...... Danke für diese gute Erklärung ..... Ich wollte nur ein paar Infos zu Async-Exec ...... Basierend auf deiner Antwort in Async Exec .... Start A-> B-> C-> D-> Warten Sie, bis A fertig ist ... Also beginnen alle A, B, C, D gleichzeitig ...... und sie warten, bis A fertig ist ..... So auch B wird erst beendet, wenn A beendet ist, und C nach B und so weiter ......? Oder kann B zuerst fertig werden und dann kann A fertig werden?
Devrath
8
@ Devrath Die Operationen können in beliebiger Reihenfolge abgeschlossen werden.
Reed Copsey
59

Kurz gesagt, Synchronisation bezieht sich auf den Start- und Endpunkt von zwei oder mehr Prozessen , NICHT auf deren Ausführung . In diesem Beispiel wird der Endpunkt von Prozess A mit dem Startpunkt von Prozess B synchronisiert:

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

Asynchrone Prozesse, auf der anderen Seite, haben nicht ihre Start- und Endpunkte synchronisiert:

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

Wenn sich Prozess A mit Prozess B überschneidet, werden sie gleichzeitig oder synchron ausgeführt (Wörterbuchdefinition), daher die Verwirrung.

UPDATE: Charles Bretana hat seine Antwort verbessert , daher ist diese Antwort nur noch eine einfache (möglicherweise stark vereinfachte) Mnemonik.

entr0p3te
quelle
2
Kopie von Charles Bretana Antwort
Dinesh Saini
2
@ DineshSaini - Mein Diagramm ist etwas anders. Aus Gründen der Übersichtlichkeit habe ich in beiden Fällen A über B gesetzt und betont, ob ihre Start- und Endpunkte synchronisiert sind. Das Diagramm von Charles Bretana ordnet die synchronen Prozesse der Reihe nach an, ohne etwas zu "synchronisieren". (Ich wollte unten seine Antwort kommentieren, um sie zu "verbessern", erkannte jedoch, dass es einfacher sein würde, nur das neue Diagramm zu zeigen.)
entr0p3te
Tolle Diagramme. Ich denke, der Weg, das oberste SYNC zu nennen, besteht darin, dass Anfang und Ende von A im oberen Diagramm effektiv gleichzeitig sind, in dem Sinne, dass keine anderen Ereignisse eingegriffen haben oder die Fertigstellung von A hätten beeinträchtigen können. Die Synchronisierung kann sich isoliert auf eine einzelne Aufgabe beziehen, z. B. das Hinzufügen zu CPU-Registern, deren Anfang und Ende so nahe beieinander liegen, dass sie tatsächlich wörterbuchsynchron sind.
Dean Radcliffe
55

Synchron bedeutet, dass der Anrufer auf die Antwort oder den Abschluss wartet, asynchron, dass der Anrufer fortfährt und eine Antwort später kommt (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 Folgendes ausgeben:

Before call
In call
After call

Wenn wir jedoch doSomething asynchron machen würden (mehrere Möglichkeiten, dies zu tun), könnte die Ausgabe wie folgt aussehen:

Before call
After call
In call

Weil die Methode, die den asynchronen Aufruf ausführt, sofort mit der nächsten Codezeile fortfährt. 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.

Ragoczy
quelle
34

Ich denke, dies ist eine etwas runde Erklärung, aber es wird immer noch anhand eines Beispiels aus dem wirklichen Leben verdeutlicht.

Kleines Beispiel:

Angenommen, das Abspielen eines Audios umfasst drei Schritte:

  1. Abrufen des komprimierten Songs von der Festplatte
  2. Dekomprimieren Sie das Audio.
  3. Spielen Sie das unkomprimierte Audio ab.

Wenn Ihr Audio-Player für jedes Lied nacheinander die Schritte 1,2,3 ausführt, ist er synchron. Sie müssen einige Zeit warten, um das Lied zu hören, bis das Lied tatsächlich abgerufen und dekomprimiert wird.

Wenn Ihr Audio-Player die Schritte 1,2,3 unabhängig voneinander ausführt, ist er asynchron. dh. Wenn während der Wiedergabe von Audio 1 (Schritt 3) Audio 3 parallel von der Festplatte abgerufen wird (Schritt 1) ​​und Audio 2 parallel dekomprimiert wird. (Schritt 2) Am Ende hören Sie das Lied, ohne lange auf das Abrufen und Dekomprimieren zu warten.

aJ.
quelle
32

Bei Synchronisierungs- und Asynchronisierungsvorgängen geht es um die Ausführungsreihenfolge einer neuen Aufgabe in Bezug auf die aktuelle Aufgabe. Zwei Aufgaben in einer Tabelle: aktuelle Aufgabe und eine neue Aufgabe

Synchron (Blockieren) - impliziert, dass Aufgaben einzeln ausgeführt werden. Eine nächste Aufgabe wird erst gestartet, nachdem die vorherige Aufgabe beendet wurde. Task 2wird erst gestartet, wenn Task 1es beendet ist

Asynchron (nicht blockierend) - impliziert, dass die Task die Kontrolle sofort mit dem Versprechen zurückgibt, einen Code auszuführen und später über das Ergebnis zu benachrichtigen (z. B. Rückruf, Funktion). Task 2wird ausgeführt, auch wenn Task 1es nicht fertig ist

SO Antwort über Synchronisierung und Asynchronisierung: in iOS , in Android

yoAlex5
quelle
Das Diagramm im synchronen Multithread-Beispiel scheint die gleichzeitige Ausführung von Threads darzustellen.
Samis
@ sαmosΛris können Sie Thread wie X-Achse betrachten, die Timeline anzeigt
yoAlex5
Die x-Achse wird üblicherweise als räumliche Dimension verwendet; die t-Achse für die Zeit - eine wichtige Unterscheidung bei der Analyse der Komplexität von Algorithmen.
Samis
23

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

Wenn Sie beispielsweise eine Datei aus dem Internet herunterladen möchten, können Sie dazu eine Synchronfunktion verwenden, die Ihren Thread jedoch blockiert, bis der Download der Datei abgeschlossen ist. Dies kann dazu führen, dass Ihre Anwendung nicht mehr auf Benutzereingaben reagiert.

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

Michał Piaskowski
quelle
1
Wie wird dein Beispiel schneller sein? Am Ende können Sie die Datei erst abspielen, wenn der Download abgeschlossen ist. Können Sie erklären? Ich glaube, ich verstehe dann nicht asynchron und ich bin es wahrscheinlich, aber was würde dieser andere Schritt oder Prozess tun, während der andere Prozess ausgeführt wird (Download)? Ich meine, was können Sie tun, bis Sie diesen asynchronen Prozess wieder in Ihrer App erhalten (herunterladen) ... Ich verstehe ihn nicht. Also, was, Sie müssten dem Benutzer immer noch eine Art Wartemechanismus zeigen, egal was in beiden Situationen passiert?
PositiveGuy
4
Es muss nicht schneller sein. Es geht darum, den Hauptthread nicht zu blockieren, damit er andere Arten von Benutzereingaben verarbeiten kann. Beispielsweise möchte der Benutzer den Download möglicherweise abbrechen oder gleichzeitig eine andere Datei herunterladen.
Michał Piaskowski
19

Als wirklich einfaches Beispiel:

SYNCHRON

Stellen Sie sich 3 Schüler vor, die angewiesen wurden, ein Staffellauf auf einer Straße durchzuführen.

Die erste Schülerin läuft ihre vorgegebene Distanz, hält an und gibt den Staffelstab an die zweite weiter. Niemand sonst hat angefangen zu rennen.

1------>
        2.
                3.

Wenn die 2. Schülerin den Staffelstab zurückholt, beginnt sie, ihre vorgegebene Distanz zu laufen.

      1.
        2------>
                3.

Die 2. Schülerin hat ihren Schnürsenkel gelöst. Jetzt hat sie angehalten und wieder gefesselt. Aus diesem Grund wurde die Endzeit des 3. verlängert und die Startzeit des 3. verzögert.

      1.
        --2.--->
                3.

Dieses Muster setzt sich fort, bis der 3. den Staffelstab vom 2. abholt und das Rennen beendet.

ASYNCHRON

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

Der Schnürsenkel der 2. Person wurde gelöst. Sie blieb stehen, um es wieder zusammenzubinden.

Aber niemand wartet darauf, dass sie es festhält. Alle anderen gehen immer noch auf dem gleichen Weg wie zuvor, in dem gleichen Tempo wie sie.

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

Ich habe ein GIF erstellt, um dies zu erklären. Ich hoffe, hilfreich zu sein: Schauen Sie, Zeile 3 ist asynchron und andere sind synchron. Alle Zeilen vor Zeile 3 sollten warten, bis die 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 in Zeile 5 auf Zeile 4, um die Arbeit zu beenden. und Zeile 6 sollte auf Zeile 5 und 7 auf 6 warten, da Zeile 4,5,6,7 nicht asynchron sind. Zeile 3 ist asynchron und andere sind synchron

Abolfazl Miadian
quelle
12

Wenn Sie eine Sequenz wie folgt ausführen: a> b> c> d>, wenn während der Ausführung ein Fehler auftritt, wie:

a
b
c
fail

Dann fangen wir von vorne an:

a
b
c
d

das ist synchron

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

a
b
c
fail

... aber anstatt von vorne neu zu starten, starten wir von der Fehlerquelle aus neu:

c
d

... das ist als asynchron bekannt.

mohamed tharik
quelle
1
Könnten
5
Diese Antwort ist einfach nicht richtig.
Marquis von Lorne
7

Sie verwechseln Synchronous mit Parallel vs Series. Synchron bedeutet alles gleichzeitig. Synchronisierte Mittel, die miteinander in Beziehung stehen, können in Reihe oder in einem festen Intervall bedeuten. Während das Programm alles tut, läuft es in Reihe. Holen Sie sich ein Wörterbuch ... deshalb haben wir unsüßigen Tee. Sie haben Tee oder gesüßten Tee.

Joe
quelle
3
Tatsächlich bezieht sich "synchronisiert" auf die Beziehung zwischen den Anweisungen und der Uhr. NICHT die Beziehung zwischen den Anweisungen selbst. Deshalb sieht es rückwärts aus "synchron" bedeutet eigentlich eins nach dem anderen: aber die Anweisungen sind auf die Uhr SYNCHRONISIERT. "Asynchron" bedeutet "jederzeit egal, wann es passiert": Die Anweisungen müssen nicht mit der Uhr synchronisiert werden. Ja, es gibt eine Wörterbuchdefinition, aber Sie müssen sicherstellen, dass Sie die richtige Situation definieren.
Tom Padilla
1
Synchron bedeutet beim Rechnen nicht "alle gleichzeitig". Sie verwechseln Synchronisation mit Synchronisation und "Parallel versus Serie" mit Tee und süßem Tee. Antwort macht überhaupt keinen Sinn.
Marquis von Lorne
7

Synchron bedeutet im Grunde, dass Sie immer nur eine Sache gleichzeitig ausführen können. Asynchron bedeutet, dass Sie mehrere Dinge gleichzeitig ausführen können und die Ausführung des aktuellen Dings nicht beenden müssen, um mit dem nächsten fortzufahren.

Mike
quelle
Werden nicht mehrere Dinge gleichzeitig ausgeführt, die als Multithreading und nicht als asynchron bezeichnet werden?
Sreekanth Karumanaghat
7

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 braten.
  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 im 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 starten. Sie würden das Brot in den Toaster legen und dann die Eier starten. In jedem Schritt des Prozesses würden Sie eine Aufgabe starten und dann Ihre Aufmerksamkeit auf Aufgaben richten, die für Ihre Aufmerksamkeit bereit sind.

Das Frühstück kochen ist ein gutes Beispiel für asynchron Arbeit, die nicht parallel ist. Eine Person (oder ein Thread) kann alle diese Aufgaben erledigen. Wenn Sie die Frühstücksanalogie fortsetzen, kann eine Person das Frühstück asynchron zubereiten, indem Sie die nächste Aufgabe starten, bevor die erste abgeschlossen ist. Das Kochen schreitet fort, unabhängig davon, ob jemand es sieht oder nicht. Sobald Sie die Pfanne für die Eier erwärmen, können Sie mit dem Braten des Specks beginnen. Sobald der Speck beginnt, können Sie das Brot in den Toaster geben.

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 nur auf diese eine Aufgabe konzentrieren. Jeder Koch (oder Faden) wird synchron blockiert und wartet darauf, dass der Speck zum Umdrehen bereit ist oder der Toast platzt.

Referenz aus asynchronen Programmierkonzepten

Hla Min Swe
quelle
4

Eine synchrone Operation erledigt ihre Arbeit, bevor sie zum Anrufer zurückkehrt.

Eine asynchrone Operation erledigt (den größten Teil oder die gesamte) Arbeit, nachdem sie zum Anrufer zurückgekehrt ist.

Maxim Eliseev
quelle
Der Link ist tot.
Hoffentlich hilfreich
1

In Bezug auf die Definition der synchronen Ausführung " zur gleichen Zeit " (die manchmal verwirrend ist) ist hier ein guter Weg, dies zu verstehen:

Synchrone Ausführung : Alle Aufgaben innerhalb eines Codeblocks werden gleichzeitig ausgeführt.

Asynchrone Ausführung : Nicht alle Aufgaben innerhalb eines Codeblocks werden gleichzeitig ausgeführt.

docta_faustus
quelle
Ich würde dem eher zustimmen, wenn Sie "effektiv zur gleichen Zeit" oder "aus praktischen Gründen" sagen würden. Ich denke, die Abwertung war für die ungenaue Aussage, dass die Dinge tatsächlich zur gleichen Zeit erledigt werden.
Dean Radcliffe
1

Ich denke, eine gute Art, daran zu denken, ist ein klassisches Staffellaufrennen

Synchron : Prozesse wie Mitglieder desselben Teams werden erst ausgeführt, wenn sie den Staffelstab erhalten (Ende der Ausführung des vorherigen Prozesses / Läufers), und dennoch agieren sie alle synchron miteinander.

Asynchron : Wenn Prozesse wie Mitglieder verschiedener Teams auf derselben Staffellaufbahn laufen und anhalten, werden sie asynchron miteinander, jedoch innerhalb desselben Rennens (Gesamtprogrammausführung).

Macht das Sinn?

Sharif
quelle
1

Eine andere englische Definition von Synchronize finden Sie hier

Koordinate; kombinieren.

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

Eine asynchrone Aufgabe ist also nicht mit anderen Aufgaben koordiniert, während eine synchrone Aufgabe mit anderen Aufgaben koordiniert ist, sodass eine Aufgabe beendet wird, bevor eine andere beginnt.

Wie dies erreicht wird, ist eine andere Frage.

Greg Gum
quelle
0

Synchron bedeutet, dass die Ausführung nacheinander in der Warteschlange ausgeführt wird. Angenommen, es gibt nur Fahrzeuge, die unter Freunden geteilt werden müssen, um ihr Ziel zu erreichen. Ein Fahrzeug nach dem anderen wird geteilt.
Im asynchronen Fall kann jeder Freund ein Mietfahrzeug bekommen und sein Ziel erreichen.

Rohit
quelle
0

Ja, synchron bedeutet gleichzeitig, wörtlich, es bedeutet, alle zusammen zu arbeiten. Mehrere Menschen / Objekte auf der Welt können mehrere Dinge gleichzeitig tun. Wenn wir uns jedoch den Computer ansehen, heißt es, dass synchron bedeutet, dass die Prozesse zusammenarbeiten, was bedeutet, dass die Prozesse von der Rückkehr voneinander abhängig sind und dass sie deshalb ausgeführt werden nacheinander in der richtigen Reihenfolge. Während asynchron bedeutet, dass Prozesse nicht zusammenarbeiten, können sie gleichzeitig arbeiten (wenn sie sich auf Multithread befinden), aber unabhängig voneinander.

Saptarshi
quelle