Dieser Artikel stellt Ihnen die Event-Schleife in node.js vor, wirft einen Blick auf das Event-Loop-Modell, die verschiedenen Phasen der Event-Schleife und teilt zwei Interviewfragen zur Event-Schleife.
Die JavaScript-Engine selbst implementiert den Ereignisschleifenmechanismus nicht. Die Ereignisschleife im Browser wird vom Browser implementiert, und die Ereignisschleife in NodeJS wird hauptsächlich von der zugrunde liegenden Libuv-Bibliothek implementiert.
Die Libuv-Bibliothek ist ereignisgesteuert und kapselt und vereinheitlicht API-Implementierungen auf verschiedenen Plattformen. Die plattformübergreifenden und Ereignisschleifenmechanismen von NodeJS werden über die Libuv-Bibliothek implementiert. [Empfohlenes Lernen: „nodejs Tutorial“]
Das Obige ist in vier Schritte unterteilt:
1. Die V8-Engine von NodeJS analysiert den JavaScript-Code und ruft dann die NodeAPI auf Die Libuv-Bibliothek zur Verarbeitung.
3 Libuv verwaltet die Ausführung dieser Aufgaben über den Ereignisschleifenmechanismus und gibt die Ergebnisse nach der Verarbeitung an die V8-Engine zurück.
4. V8-Engine-Callback-Verarbeitung Libuv gibt zurück
Mikroaufgaben und MakroaufgabenMakroaufgaben: setTimeout, setInterval, setImmediate
Mikroaufgaben: Promise.then(), Promise.catch(), Process.nextTick()
Jede Phase der EreignisschleifeJede Phase führt den Strom aus Führen Sie die Aufgabenwarteschlange der Stufe aus und führen Sie dann die Mikroaufgabenwarteschlange der aktuellen Stufe aus. Erst nachdem alle Mikroaufgaben ausgeführt wurden, wird die nächste Stufe betreten.
Unterschiede bei Ereignisschleifen in Browsern:Es gibt keine mehreren Stufen in Browsern; Prioritätsstufen: synchronisierter Code, Mikrotasks, Makrotasks
In Browsern können Makrotasks mehrere Warteschlangen haben, aber es gibt nur eine Mikrotask und Jedes Mal wird zuerst die Mikrotask und dann die Makrotask ausgeführt die zugrunde liegende Libuv-Bibliothek zur Ausführung, und der Hauptmechanismus der Ereignisschleife wird durch die Libuv-Bibliothek vervollständigt.
Die gesamte Ereignisschleife ist in 6 Phasen unterteilt: Timer-Phase, ausstehende Rückrufphase, Abfragephase, Überprüfungsphase, Rückrufphase schließen. Die Ausführungsreihenfolge ist: Nachdem die Aufgabenwarteschlange in jeder Phase ausgeführt wurde, werden nur Mikrotasks ausgeführt Mikrotasks werden ausgeführt. Nachdem die Aufgabenausführung abgeschlossen ist, wird die nächste Stufe ausgeführt. Die Ereignisschleife des Browsers ist nicht in Stufen unterteilt und die Prioritätsreihenfolge ist: Synchronisierungscode, Mikrotasks und Makrotasks.
Frage 1: Was verstehen Sie unter der Ereignisschleife von NodeJS?
Antwort: Mein Verständnis der Ereignisschleife ist, dass Node ein Single-Thread ist. Der Hauptthread stellt alle Aufgaben in die zirkuläre Warteschlange, und dann nimmt die zugrunde liegende libuv-Bibliothek die Aufgaben aus der zirkulären Ereigniswarteschlange und weist sie anderen zu Threads zur Verarbeitung Der Hauptthread führt gleichzeitig auch eine Rückrufverarbeitung durch, und der gesamte Prozess bildet eine Ereignisschleife.2. Browser-Aufgabenpriorität: Synchronisationscode, Mikroaufgaben, Makroaufgaben
Frage 2: Aufgaben in der Ereigniswarteschlange Ausführungsreihenfolge ?
Antwort: Die NodeJS-Ereignisschleife ist in mehrere Phasen unterteilt. Die Ausführungsreihenfolge ist: Nach Abschluss einer Phase werden die Mikrotasks ausgeführt und dann wird die nächste Phase ausgeführt. Weitere Kenntnisse zum Thema Programmierung finden Sie unter:Einführung in die Programmierung
! !Das obige ist der detaillierte Inhalt vonVerstehen Sie die Ereignisschleife in node.js in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!