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.
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!
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" );
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,
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,
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.
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!