Heim  >  Artikel  >  Web-Frontend  >  Verstehen Sie die Ereignisschleife in node.js in einem Artikel

Verstehen Sie die Ereignisschleife in node.js in einem Artikel

青灯夜游
青灯夜游nach vorne
2021-07-27 09:36:462146Durchsuche

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.

Verstehen Sie die Ereignisschleife in node.js in einem Artikel

Ereignisschleifenmodell

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“]

Verstehen Sie die Ereignisschleife in node.js in einem Artikel

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 Makroaufgaben

Je nach Art der Aufgaben werden verschiedene Aufgabenwarteschlangen, Mikroaufgabenwarteschlangen und Makroaufgabenwarteschlangen unterteilt.

Makroaufgaben: setTimeout, setInterval, setImmediate

Mikroaufgaben: Promise.then(), Promise.catch(), Process.nextTick()

Jede Phase der Ereignisschleife

Timer-Phase: Alle ausführen setTimeout- und setInterval-Callback
ausstehende Callback-Phase: Callback für bestimmte Systemvorgänge. Zum Beispiel TCP-Verbindungsfehler
Poll-Phase: Abfragen, um auf neue Links und Anforderungen und andere Ereignisse zu warten, und Ausführen von E/A-Rückrufen. Beispiel: Dateilesevorgang
Prüfphase: SetImmedidate-Rückruf ausführen
Rückrufphase schließen: Rückrufausführung schließen, z. B. socket.on(close...)

Jede 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.

Interviewfragen

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.

Unterschiede zur Browser-Ereignisschleife:

1. Der Browser ist nicht in mehrere Stufen unterteilt

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen