Fallstudie zu JavaScript-Ereignisschleifen

Fallstudie zu JavaScript-Ereignisschleifen

Ereignisschleife in js

Da JavaScript ein Single-Thread ist, kann dasselbe Ereignis nur eine Methode ausführen. Daher werden die Methoden im Programm dem Ausführungsstapel hinzugefügt und in der Reihenfolge „Last-In-First-Out“ ausgeführt. Wenn eine asynchrone Aufgabe auftritt, wird sie nicht blockiert, sondern die Aufgabe wird in die Ereigniswarteschlange gestellt und der synchrone Code im Ausführungsstapel wird weiterhin ausgeführt. Wenn alle Aufgaben im aktuellen Ausführungsstapel ausgeführt wurden, wird die Aufgabe in der Ereigniswarteschlange durchsucht und die Rückruffunktion der Aufgabe wird in den Ausführungsstapel gestellt, um den synchronen Code darin auszuführen. Dieser wiederholte Zyklus wird als Ereignisschleife bezeichnet.

node.js

Funktionen von Node.js

Ereignisgesteuert

Führen Sie den Code von oben nach unten aus und fügen Sie ihn der Ereigniswarteschlange hinzu, wenn ein Rückruf erforderlich ist. Wenn der Hauptthread fertig ist, führen Sie den Rückruf in der Ereigniswarteschlange aus. Der gesamte Prozess blockiert weder neue Ereignisse, noch muss er bereits etablierte Ereignisse aufrechterhalten.

Nicht blockierende io

Wenn der Hauptthread im Leerlauf ist, beginnt er, die Ereigniswarteschlange zu durchlaufen und die Ereignisse in der Ereigniswarteschlange zu verarbeiten. Wenn das Ereignis keine IO-Aufgabe ist, wird es von selbst verarbeitet. Wenn es sich um eine IO-Aufgabe handelt, wird sie zur Verarbeitung an den Threadpool übergeben und eine Rückruffunktion wird angegeben. Anschließend werden andere Ereignisse in der Schleifenwarteschlange fortgesetzt. Wenn der Blockierungsvorgang abgeschlossen ist, werden das Ergebnis und die Rückruffunktion in die Warteschlange gestellt und die Rückruffunktion wird ausgeführt, wenn der Hauptthread eine Schleife durchläuft.

Vor- und Nachteile von Node.js

Vorteil

  1. Hohe Parallelität: Node.js verwendet einen Hauptthread zur Bearbeitung aller Anforderungen und verarbeitet dann E/A-Vorgänge asynchron. Dadurch wird der Mehraufwand und die Komplexität des Erstellens und Löschens von Threads sowie des Wechselns zwischen Threads vermieden.
  2. Geeignet für IO-intensive Anwendungen

Mangel:

  1. Nicht für CPU-intensive Anwendungen geeignet: Langzeitberechnungen führen dazu, dass die CPU-Zeitscheibe nicht freigegeben wird, wodurch es unmöglich wird, nachfolgende IO-Ereignisse zu initiieren
  2. Multi-Core-CPUs können nicht vollständig genutzt werden
  3. Geringe Zuverlässigkeit. Wenn ein bestimmter Teil des Codes abstürzt, stürzt das gesamte System ab.

Anwendbare Szenarien:

  1. RESTful API: Anfragen und Antworten erfordern nur eine kleine Textmenge und keine umfangreiche logische Verarbeitung. Kann Zehntausende von Verbindungen verarbeiten. Fordern Sie einfach die API an, um die Daten zu organisieren und zurückzugeben
  2. In Szenarien mit einer großen Anzahl von Ajax-Anfragen
  3. Chat-Dienst: leicht, hoher Datenverkehr, keine komplexe Rechenlogik

Node.js-Ereignisschleife

Die Knotenereignisschleife basiert auf der Libuv-Engine. Nachdem v8 den JS-Code interpretiert hat, ruft es die entsprechende Knoten-API auf. Diese APIs werden von der Libuv-Engine gesteuert, um entsprechende Aufgaben auszuführen und verschiedene Ereignisse in verschiedene Warteschlangen zu stellen, die auf die Ausführung durch den Hauptthread warten. Daher existiert die Knotenereignisschleife in der Libuv-Engine.

libuv-Engine: Implementiert Ereignisschleifen, Dateivorgänge usw. und ist der Kern von node.js zur Erzielung asynchroner

Der einzelne Thread von node.js bedeutet nur, dass JavaScript in einem einzelnen Thread ausgeführt wird und E/A-Vorgänge intern über den Thread-Pool abgeschlossen werden können.

Polling (Abfragephase) ---》Prüfen (Prüfphase) ---》Close-Callback (Phase des Ereignisrückrufs schließen) ---》Timer (Phase der Timererkennung) ---》E/A-Rückrufphase ---》Leerlaufphase ---》Polling-Phase

Umfragephase (Umfragephase):

V8 analysiert den JS-Code und übergibt ihn an die Libuv-Engine. Anschließend tritt die Schleife zuerst in die Polling-Phase ein. Überprüfen Sie zunächst, ob sich ein Ereignis in der Polling-Warteschlange befindet. Führen Sie den Rückruf in der Reihenfolge „First-In-First-Out“ aus, falls dies der Fall ist.

Dies ist das Ende dieses Artikels über die Fallstudie zu JavaScript-Ereignisschleifen. Weitere Informationen zu JavaScript-Ereignisschleifen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Erfahren Sie mehr über die am häufigsten verwendeten JavaScript-Ereignisse
  • Analyse des Ereignisschleifenmechanismus von JavaScript
  • JavaScript-Ereigniserfassungs-Blubbern und Erfassungsdetails
  • Detaillierte Erklärung der JS-Ereignisdelegation
  • Eine kurze Analyse von Event Bubbling und Event Capture in js
  • Detaillierte Erläuterung der Javascript-Ereigniserfassungs- und Bubbling-Methoden

<<:  Detaillierte Schritte zur Installation der XML-Erweiterung in PHP unter Linux

>>:  Eine einfache Methode zum regelmäßigen Löschen abgelaufener Datensätze in MySQL

Artikel empfehlen

Eine kurze Zusammenfassung von Vue Keep-Alive

1. Funktion Wird hauptsächlich verwendet, um den ...

3 einfache Möglichkeiten, Karusselleffekte mit JS zu erzielen

In diesem Artikel werden 3 Methoden beschrieben, ...

Details zur Bündelung statischer Ressourcen ohne JavaScript

Inhaltsverzeichnis 1. Benutzerdefinierter Import ...

So konfigurieren Sie Nginx's Anti-Hotlinking

Experimentelle Umgebung • Eine minimal installier...

Javascript-Bereich und Abschlussdetails

Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...

JavaScript-Grundlagenvariablen

Inhaltsverzeichnis 1. Variablenübersicht 1.1 Spei...

Detaillierte Erklärung zur Verwendung des MySQL-Sicherungsskripts mysqldump

In diesem Artikel wird das MySQL-Sicherungsskript...

Praxis der Verwendung von SuperMap in Vue

Inhaltsverzeichnis Vorwort Ressourcen zum Thema V...

Einführung in MyCat, die Datenbank-Middleware

1. Mycat-Anwendungsszenarien Mycat wurde für eine...

Erste Schritte mit benutzerdefinierten Anweisungen in Vue 3.0

Inhaltsverzeichnis 1. Benutzerdefinierte Anweisun...