Der asynchrone Mechanismus des Knotens basiert auf „Ereignissen“. Alle E/A-, Netzwerkkommunikations- und Datenbankabfragen werden auf nicht blockierende Weise ausgeführt und die zurückgegebenen Ergebnisse werden von der Ereignisschleife verarbeitet. Der Knoten verarbeitet nur ein Ereignis gleichzeitig und tritt sofort in die Ereignisschleife ein, um nachfolgende Ereignisse nach Abschluss zu überprüfen. Auf diese Weise können sich CPU und Speicher auf die gleichzeitige Verarbeitung einer Sache konzentrieren und gleichzeitig versuchen, die parallele Ausführung zeitaufwändiger E/A- und anderer Vorgänge zu ermöglichen.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, NodeJS Version 16, DELL G3-Computer.
NodeJS ist Single-Threading und bietet die folgenden Vorteile:
Einfach
Hohe Leistung, Vermeidung von häufigem Threadwechsel-Overhead
Es beansprucht weniger Ressourcen, da es Single-Threaded ist , und unter hoher Last Unter solchen Umständen ist die Speichernutzung immer noch sehr gering
Thread-sicher, es gibt keine Probleme wie Sperren, Entsperren und Deadlock
Wie löst man hohe Parallelität?
node verwendet asynchrone E/A und ereignisgesteuert (Rückruffunktion), um das Problem der hohen Parallelität zu lösen.
Im Allgemeinen bieten Lösungen mit hoher Parallelität ein Multithreading-Modell, das einen Thread für jede Geschäftslogik bereitstellt und den Zeitaufwand synchroner E/A-Aufrufe durch System-Thread-Switching ausgleicht. Wie bei Apache gibt es einen Thread pro Anfrage.
NodeJS verwendet ein Single-Threaded-Modell und asynchrone Anforderungsmethoden für alle E/A-Vorgänge, um häufige Kontextwechsel zu vermeiden. Wenn NodeJS ausgeführt wird, tritt es in die Ereignisschleife ein und wartet darauf Wenn ein Ereignis eintrifft, wird jede asynchrone E/A-Anforderung in die Ereigniswarteschlange verschoben, um auf die Ausführung zu warten.
Der asynchrone Mechanismus von NodeJS basiert auf Ereignissen. Alle E/A-, Netzwerkkommunikations- und Datenbankabfragen werden nicht blockierend ausgeführt und die zurückgegebenen Ergebnisse werden von der Ereignisschleife verarbeitet. Wie im Bild gezeigt:
Der Node.js-Prozess verarbeitet jeweils nur ein Ereignis. Nach Abschluss tritt er sofort in die Ereignisschleife ein, um nachfolgende Ereignisse zu überprüfen. Dies hat den Vorteil, dass sich CPU und Speicher auf die gleichzeitige Verarbeitung einer Sache konzentrieren können und gleichzeitig versuchen, die parallele Ausführung zeitaufwändiger E/A- und anderer Vorgänge zu ermöglichen. Bei langsamen Verbindungsangriffen fügt Node.js nur Anforderungen zur Ereigniswarteschlange hinzu und wartet auf die Antwort des Betriebssystems. Daher entsteht kein Multithreading-Overhead, was die Robustheit von Webanwendungen erheblich verbessern und böswillige Angriffe verhindern kann.Ereignisschleifenmechanismus
Die sogenannte Ereignisschleife bedeutet, dass NodeJS den Ereignismechanismus verwendet, um alle asynchronen Vorgänge zu lösen. Es gibt einen Thread, der ständig in einer Schleife läuft, um die Ereigniswarteschlange zu erkennen. Die gesamte Logik in NodeJS ist die Rückruffunktion von Ereignissen, daher befindet sich NodeJS immer in der Ereignisschleife und der Programmeintrag ist die Rückruffunktion des ersten Ereignisses in der Ereignisschleife. Die Ereignisrückruffunktion kann eine E/A-Anfrage ausgeben oder das Ereignis direkt ausgeben und nach der Ausführung zur Ereignisschleife zurückkehren. Die Ereignisschleife überprüft die Ereigniswarteschlange auf nicht behandelte Ereignisse, bis das Programm endet. Die Ereignisschleife von NodeJS ist für Entwickler unsichtbar und wird von der libev-Bibliothek implementiert. libev prüft ständig, ob aktive Ereignis-Listener erkannt werden können, und verlässt die Ereignisschleife erst, wenn keine Ereignis-Listener erkannt werden und das Programm beendet wird. Weitere Informationen zu Knoten finden Sie unter:nodejs-Tutorial!
Das obige ist der detaillierte Inhalt vonWorauf basiert der asynchrone Mechanismus des Knotens?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!