Heim  >  Artikel  >  Web-Frontend  >  Beherrschen Sie schnell das ereignisgesteuerte Node.js-Modell model_node.js

Beherrschen Sie schnell das ereignisgesteuerte Node.js-Modell model_node.js

WBOY
WBOYOriginal
2016-05-16 15:09:571017Durchsuche

1. Traditionelles Thread-Netzwerkmodell

Bevor wir das ereignisgesteuerte Node.js-Modell verstehen, verstehen wir zunächst das traditionelle Thread-Netzwerkmodell. Nachdem eine Anforderung beim Webserver (IIS, Apache) eingegangen ist, wird im Thread-Pool ein Thread zugewiesen, um die Anforderungsverarbeitung abzuschließen linear und synchron, bis die Anforderungsverarbeitung abgeschlossen ist und eine Antwort ausgegeben wird. Nach Abschluss wird der Thread-Pool recycelt.

Dies führt zu folgenden Problemen:

1. Aufgrund der begrenzten Anzahl von Threads im Thread-Pool kommt es zu häufigen Wartezeiten und in schweren Fällen kann es sogar dazu kommen, dass der Server aufhängt

2. Für eine hohe Parallelität werden Sperren verwendet, um zu verhindern, dass schmutzige Daten angezeigt werden. Einige E/A-Transaktionen können lange dauern, was dazu führt, dass einige Threads warten, was ineffizient ist

2. Ereignisgesteuertes Modell

1. In Node.js gibt es eine Ereigniswarteschlange, und es wird eine Rückruffunktion zum Verarbeiten der Ergebnisse hinterlassen (ich persönlich fühle mich ein wenig ähnlich wie RunLoop). ios) verarbeitet die Ereigniswarteschlangenaufgaben in der Aufgabe, bis die Rückruffunktion nicht mehr vorhanden ist.

2. Im Falle einer Nichtblockierung wird es als Funktion mit Rückruf in die Ereigniswarteschlange gestellt und im Ereignisschleifen-Thread extrahiert und ausgeführt.

3. Wenn während der Ausführung eine E/A-Blockierung auftritt (Dateien lesen, Datenbanken abfragen, Sockets anfordern, auf Remote-Dienste zugreifen usw.), hört der Ereignisschleifen-Thread nicht auf, auf das Ergebnis zu warten, sondern führt die Warteschlange weiter aus . Die nächste Aufgabe wird nicht im Ereignisschleifenthread ausgeführt. Wenn eine Funktion ausgeführt wird, platziert Node.js Rückruffunktionen in der Ereigniswarteschlange und ihre Reihenfolge wird dadurch bestimmt, wie schnell die Funktion abgeschlossen wird.

4. Wie in 1 erwähnt, wartet der Schleifenthread nicht auf das Ergebnis, sondern führt stattdessen die nächste Aufgabe in der Warteschlange aus.

Node.js verwendet Ereignisrückrufe, um das Warten auf blockierende E/A zu vermeiden, und implementiert einen Thread-Pool im Hintergrund. Wenn eine E/A-blockierende Aufgabe auftritt, ruft es einen Thread aus dem Thread-Pool ab und stellt die Funktion und den Rückruf ein Wenn dort ausgeführt, kann die Rückruffunktion, die auf dem blockierten Thread ausgeführt wird, weiterhin Ereignisse zur Ereigniswarteschlange hinzufügen.

Das Obige dreht sich alles um das ereignisgesteuerte Node.js-Modell. Ich hoffe, es wird für das Lernen aller hilfreich sein.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn