VorwortDer folgende Inhalt ist die Ereigniswarteschlangenausführung von js im Browser, die sich von der in nodejs unterscheidet. Bitte beachten Sie. Es wird gesagt, dass js ein Single-Thread ist, aber es ist nicht wirklich ein Single-Thread. Bei der Ausführung im Browser wird jedoch nur ein Thread zur Ausführung zugewiesen. Daher erfolgt die JS-Ausführung einfädig und es kann jeweils nur eine Aufgabe ausgeführt werden, d. h., es wird jeweils eine Aufgabe erledigt und die nächste wird erledigt, nachdem die andere abgeschlossen ist. Einen Stapel und zwei Warteschlangen verstehenEin Aufrufstapel. Eine Makrowarteschlange, Makrotask, auch Tasks genannt. Eine Mikrowarteschlange, Mikrotask, auch Jobs genannt. Ausführungsprozessjs führt den globalen Skriptsynchronisierungscode aus. Wenn während dieses Vorgangs asynchrone Aufgaben auftreten, werden diese zuerst der entsprechenden Warteschlange hinzugefügt. Wenn dies erledigt ist, ist der Aufrufstapel leer. Anschließend wird die erste Aufgabe in der Warteschlange (zuerst Mikrowarteschlange, dann Makrowarteschlange) zur Erledigung nacheinander in den Aufrufstapel verschoben, bis alle Aufgaben in der Warteschlange abgeschlossen sind. Zusammenfassend lässt sich sagen, dass Sie zuerst die Synchronisierungsaufgaben, dann die Mikro-Warteschlangenaufgaben und anschließend die Makro-Warteschlangenaufgaben ausführen müssen. So verteilen Sie asynchrone Aufgaben Zu diesen asynchronen Aufgaben gehören unter anderem: Der Makro-Warteschlange sind zugeordnet:
Den Mikrowarteschlangen sind folgende Aufgaben zugeordnet:
Allgemeine Makro-Warteschlangen: setTimeout, allgemeine Mikro-Warteschlangen: Promise. Einfaches Beispielconsole.log("Synchronisierte Aufgabe 1"); setzeTimeout(() => { console.log("Makroaufgabe"); }); neues Versprechen((lösen, ablehnen) => { console.log("Synchronisierte Aufgabe 2"); lösen("Mikroaufgabe"); }).dann((Daten) => { konsole.log(Daten); }); console.log("Synchronisierte Aufgabe 3"); Das Ergebnis ist (Aufgaben nach Nummer hinzufügen und mit Pfeiltaste ausführen): Es ist zu beachten, dass die erste Ebene von Promise synchron ist, bevor der Rückruf ausgeführt wird. Dies ist die synchrone Aufgabe 2 oben. Ein schwierigeres Beispielconsole.log("Synchronisierte Aufgabe 1"); console.log("Synchronisierte Aufgabe 2"); neues Versprechen((lösen, ablehnen) => { console.log("Synchronisierte Aufgabe 3"); setzeTimeout(() => { console.log("Makroaufgabe 1"); Versprechen.lösen() .then(() => { console.log("Mikrotask 5"); }) .then(() => { console.log("Mikrotask 6"); }); }); lösen("Mikroaufgabe 1"); }) .then((Daten) => { konsole.log(Daten); gib "Mikrotask 3" zurück; }) .then((Daten) => { konsole.log(Daten); }); setzeTimeout(() => { console.log("Makroaufgabe 2"); }, 0); neues Versprechen((lösen, ablehnen) => { lösen("Mikroaufgabe 2"); }) .then((Daten, auflösen) => { konsole.log(Daten); gib "Mikrotask 4" zurück; }) .then((Daten) => { konsole.log(Daten); }); console.log("Synchronisierte Aufgabe 4"); Wie kann man es betrachten? Schauen Sie sich zuerst die erste Ebene an. Rot steht für Synchronisierung, Grün für Mikrotasks und Blau für Makrotasks. Wir werden die Synchronisierungsaufgabe abschließen und dann sehen, dass es zwei Mikrotasks und zwei Makrotasks gibt. Die ursprüngliche Ausführungsreihenfolge könnte wie folgt aussehen (ich drücke die Reihenfolge hier entsprechend der Seriennummer aus, bitte unterscheiden Sie sie vom einfachen Beispiel): Doch ganz so reibungslos lief es nicht, und bei Nummer 6 war die Lage anders. Weil während der Ausführung von Mikrotasks möglicherweise neue Mikrotasks entstehen. Nach der Ausführung von Mikrotask 1 oben wird Mikrotask 3 nach Mikrotask 2 hinzugefügt. Das heißt, nach der Ausführung von Mikrotask 2 ist die Makrotask nicht an der Reihe. Die neue Mikrotask wird weiterhin ausgeführt, bis die Mikrotask-Warteschlange vorübergehend leer ist. Daher werden die vier Mikrotasks in der Reihenfolge ausgeführt, in der sie der Warteschlange hinzugefügt wurden. Wenn zu diesem Zeitpunkt keine neuen Mikrotasks generiert werden, wird die Makrotask ausgeführt: Es ist jedoch zu beachten, dass die Situation anders ist, wenn das Obige bis Nummer (Denken Sie daran, dass, wenn sowohl Mikrotask- als auch Makrotask-Warteschlangen vorhanden sind, Mikrotasks vor Makrotasks ausgeführt werden müssen, selbst wenn sie durch die Ausführung von Makrotasks generiert werden.) Wenn Sie die endgültige Antwort nicht verstehen, können Sie das Obige sorgfältig durchlesen: ZusammenfassenDies ist das Ende dieses Artikels über die Ereigniswarteschlange des JS-Ereignisschleifens im Browser. Weitere relevante Inhalte zur Ereigniswarteschlange des JS-Ereignisschleifens finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: Beispielcode für die Konvertierung von MySQL-Zeilen und -Spalten
>>: Wann ist die Verwendung von dl, dt und dd sinnvoll?
1. Drücken Sie Win + R und geben Sie cmd ein, um ...
Ich habe mich schon immer für drahtlose Interakti...
Inhaltsverzeichnis 1. Vorteile von Proxy gegenübe...
Inhaltsverzeichnis 1. Gewöhnliche Funktionen 2. P...
So ändern Sie das Passwort in MySQL 5.7.18: 1. Fa...
Inhaltsverzeichnis Ergebnisse erzielen Vollständi...
Inhaltsverzeichnis Einführung Anweisungen Tatsäch...
Tabelle erstellen und Index erstellen Tabelle tbl...
Nachfragehintergrund Das Team muss Integrationste...
Im Allgemeinen werden Java-Lernprogramme und Bere...
【Problemanalyse】 Wir können den Befehl chown verw...
Ich habe die vorherigen Hinweise zur Installation...
In der folgenden Analyse geht es um Produktdesign...
Durch das Studium und die Anwendung von Node wiss...
Dieser Artikel stellt hauptsächlich vor, wie Deskt...