Was ist der Unterschied zwischen asynchroner und synchroner Ausführung?
Wenn Sie etwas synchron ausführen, warten Sie, bis es beendet ist, bevor Sie zu einer anderen Aufgabe übergehen. 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 zuteilen 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.
Die asynchrone Programmierung ist ein kompliziertes Thema, denn es geht um die Semantik der Dinge, die miteinander verbunden sind, wenn man sie gleichzeitig ausführen kann. Es gibt zahlreiche Artikel und Bücher zu diesem Thema; schauen Sie mal rein!
Synchrone Ausführung bedeutet, dass die Ausführung in einer einzigen Reihe erfolgt. A->B->C->D". Wenn Sie diese Routinen aufrufen, wird A
ausgeführt, dann beendet, dann wird B
gestartet, dann beendet, dann wird C
gestartet, usw.
Bei der Asynchronen Ausführung beginnen Sie eine Routine und lassen sie im Hintergrund laufen, während Sie die nächste starten, und sagen dann irgendwann "warte, bis diese beendet ist". Es ist mehr wie:
Start A->B->C->D->
Warte auf das Ende von A
Der Vorteil ist, dass Sie B
, C
und oder D
ausführen können, während A
noch läuft (im Hintergrund, auf einem separaten Thread), so dass Sie Ihre Ressourcen besser ausnutzen können und weniger "Hänger" oder "Wartezeiten" haben.
Einfach ausgedrückt bedeutet asynchrone Ausführung, dass Dinge im Hintergrund ausgeführt werden.
Wenn Sie z. B. eine Datei aus dem Internet herunterladen möchten, können Sie dafür eine synchrone Funktion verwenden, die jedoch Ihren Thread blockiert, bis das Herunterladen der Datei abgeschlossen ist. Dies kann dazu führen, dass Ihre Anwendung nicht mehr auf Benutzereingaben reagiert.
Stattdessen könnten Sie die Datei im Hintergrund mit einer 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 der Download abgeschlossen ist.