Was ist der Unterschied zwischen asynchron und synchron in Javascript?

青灯夜游
Freigeben: 2023-01-06 11:17:08
Original
3296 Leute haben es durchsucht

Unterschied: Wenn bei der Synchronisierung ein Funktionsaufruf ausgegeben wird, muss eine Sache nach der anderen ausgeführt werden, und die nächste kann erst ausgeführt werden, wenn die vorherige abgeschlossen ist, während bei der asynchronen Funktion ein asynchroner Prozeduraufruf ausgegeben wird Anrufer Sie können weitere Vorgänge ausführen, bevor Sie Ergebnisse erhalten.

Was ist der Unterschied zwischen asynchron und synchron in Javascript?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Die JavaScript-Sprache ist eine „Single-Threaded“-Sprache

Im Gegensatz zur Java-Sprache kann ein Thread geöffnet werden, indem die Thread-Klasse geerbt und dann thread.start verwendet wird.

JavaScript ist also wie ein Fließband, nur ein Fließband, entweder bei der Verarbeitung oder beim Verpacken, und kann nicht mehrere Aufgaben und Prozesse gleichzeitig ausführen.

„Synchronisation“ – das Wort „zusammen“ bringt die Leute sofort dazu, daran zu denken; Das Wort könnte „während...während...“ lauten, zum Beispiel „Xiao Ming isst Eis und macht gleichzeitig Hausaufgaben.“ Daran ist nichts auszusetzen, nachdem er das Eis gegessen hat seine Hausaufgabe. Ist das asynchron? Das wäre ein großer Fehler!


Tatsächlich synchron und asynchron,


Egal was passiert, es gibt nur eine Pipeline (einzelner Thread), wenn Dinge erledigt werden ,

Der Unterschied zwischen synchron und asynchron liegt in der Ausführungsreihenfolge jedes Prozesses auf dieser Pipeline anders.

Die grundlegendste asynchrone Funktion sind die Funktionen setTimeout und setInterval,

sehr häufig, aber nur wenige wissen, dass dies tatsächlich asynchron ist,

weil sie die Ausführungsreihenfolge von js steuern können. Wir können es auch einfach so verstehen:

Operationen, die die normale Ausführungssequenz des Programms ändern können, können als asynchrone Operationen betrachtet werden. Der folgende Code:

    console.log( "1" );
    setTimeout(function() {
        console.log( "2" )
    }, 0 );
    setTimeout(function() {
        console.log( "3" )
    }, 0 );
    setTimeout(function() {
        console.log( "4" )
    }, 0 );
    console.log( "5" );
Nach dem Login kopieren

Was ist die Ausgabereihenfolge?

Es ist ersichtlich, dass wir zwar die Wartezeit in setTimeout(function, time) auf 0 setzen, die darin enthaltene Funktion jedoch später noch ausgeführt wird.

Obwohl die Zeitverzögerung von setTimeout 0 ist, Was ist der Unterschied zwischen asynchron und synchron in Javascript?

wird die Funktion auch in eine Warteschlange gestellt und wartet auf die nächste Gelegenheit zur Ausführung.

Der aktuelle Code (bezieht sich auf das Programm, das nicht hinzugefügt werden muss Warteschlange) muss in der Warteschlange sein, bevor das Programm abgeschlossen ist,

daher stimmen die Ergebnisse möglicherweise nicht mit den erwarteten Ergebnissen überein.

Hier sprechen wir von einer „Warteschlange“ (d. h. Aufgabenwarteschlange).

Was wird in diese Warteschlange gestellt? Was wird in setTimeout platziert?

Diese Funktionen werden der Reihe nach zur Warteschlange hinzugefügt.

Das heißt, in dieser Warteschlange werden alle Programme in der Funktion ausgeführt, nachdem alle Codes außerhalb der Warteschlange ausgeführt wurden.

Warum ist das so? Denn beim Ausführen eines Programms verwendet der Browser standardmäßig Methoden wie setTimeout und Ajax-Anforderungen als zeitaufwändige Programme (obwohl diese möglicherweise nicht zeitaufwändig sind). Programme Warteschlange: Nachdem alle nicht zeitaufwändigen Programme ausgeführt wurden, werden die Programme in der Warteschlange der Reihe nach ausgeführt.

Zurück zum ursprünglichen Ausgangspunkt – Javascript ist Single-Threaded. Ein einzelner Thread bedeutet, dass alle Aufgaben in die Warteschlange gestellt werden müssen und die nächste Aufgabe erst ausgeführt wird, wenn die vorherige Aufgabe abgeschlossen ist.

Wenn die vorherige Aufgabe lange dauert, muss die nächste Aufgabe warten.

Es gibt also ein Konzept – Aufgabenwarteschlange. Wenn die Warteschlange auf einen großen Rechenaufwand zurückzuführen ist und die CPU zu beschäftigt ist, vergessen Sie es,

Aber oft ist die CPU im Leerlauf, weil die E/A-Geräte (Eingabe- und Ausgabegeräte) sehr langsam sind (z. B. Ajax-Operationen, die Daten lesen). aus dem Netzwerk). Ich muss warten, bis die Ergebnisse vorliegen, bevor ich fortfahre. Daher erkannten die Entwickler der JavaScript-Sprache, dass der Hauptthread zu diesem Zeitpunkt das E/A-Gerät vollständig ignorieren, die wartenden Aufgaben anhalten und die späteren Aufgaben zuerst ausführen konnte. Warten Sie, bis das E/A-Gerät das Ergebnis zurückgibt, gehen Sie dann zurück und fahren Sie mit der Ausführung der angehaltenen Aufgabe fort.

Alle Aufgaben können also in zwei Typen unterteilt werden:

Eine ist eine synchrone Aufgabe (synchron) und die andere ist eine asynchrone Aufgabe (asynchron). Synchrone Aufgaben beziehen sich auf Aufgaben, die zur Ausführung im Hauptthread eingereiht werden.

Die nächste Aufgabe kann erst ausgeführt werden, nachdem die vorherige Aufgabe ausgeführt wurde. Asynchrone Aufgaben beziehen sich auf Aufgaben, die nicht in den Hauptthread, sondern in die „Aufgabenwarteschlange“ gelangen. (Aufgabenwarteschlange) Die Aufgabe tritt erst dann zur Ausführung in den Hauptthread ein, wenn die Hauptthread-Aufgabe abgeschlossen ist und die „Aufgabenwarteschlange“ beginnt, den Hauptthread zu benachrichtigen und die Ausführung der Aufgabe anzufordern.

Im Einzelnen sieht der asynchrone Ausführungsmechanismus wie folgt aus:


Alle synchronen Aufgaben werden im Hauptthread ausgeführt und bilden einen Ausführungskontextstapel.


    Neben dem Hauptthread gibt es auch eine „Aufgabenwarteschlange“. Solange die asynchrone Aufgabe laufende Ergebnisse hat, wird ein Ereignis in die „Aufgabenwarteschlange“ gestellt.
  • Sobald alle Synchronisierungsaufgaben im „Ausführungsstapel“ ausgeführt wurden, liest das System die „Aufgabenwarteschlange“, um zu sehen, welche Ereignisse darin enthalten sind. Diese entsprechenden asynchronen Aufgaben beenden den Wartezustand, betreten den Ausführungsstapel und beginnen mit der Ausführung.
  • Der Hauptthread wiederholt den dritten Schritt oben immer wieder.


Solange der Hauptthread leer ist, wird die „Aufgabenwarteschlange“ gelesen. Dies ist der laufende Mechanismus von JavaScript. Dieser Vorgang wiederholt sich ständig.

Ereignisse in der „Aufgabenwarteschlange“ umfassen neben IO-Geräteereignissen

auch einige benutzergenerierte Ereignisse (wie Mausklicks, Seitenscrollen usw.),

wie $(selectot). click(function ), das sind relativ zeitaufwändige Vorgänge.

Solange die Rückruffunktionen dieser Ereignisse angegeben sind, werden diese Ereignisse bei ihrem Auftreten in die „Aufgabenwarteschlange“ eingegeben und warten auf das Lesen durch den Hauptthread.

Die sogenannte „Rückruffunktion“ (Rückruf) ist der Code, der vom Hauptthread aufgehängt wird. Die zuvor erwähnte Funktion im Klickereignis $(selectot).click(function) ist eine Rückruffunktion. Asynchrone Aufgaben müssen eine Rückruffunktion angeben. Wenn der Hauptthread mit der Ausführung einer asynchronen Aufgabe beginnt, wird die entsprechende Rückruffunktion ausgeführt. Beispielsweise geben die Erfolgs-, Vollständigkeits- und Fehlerfunktionen von Ajax auch eigene Rückruffunktionen an, die zur „Aufgabenwarteschlange“ hinzugefügt werden und auf die Ausführung warten.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen asynchron und synchron in Javascript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!