node.js ist eine Plattform, die auf der Chrome-JavaScript-Laufzeitumgebung basiert. Zu den Anwendungsszenarien gehören lokalisierte Online-Musikanwendungen, lokalisierte Online-Suchanwendungen, lokalisierte Online-APPs usw.
Die Betriebsumgebung dieses Artikels: Windows7-System, NodeJS10.16.2-Version, Dell G3-Computer.
Was ist node.js?
Einfach ausgedrückt ist Node.js JavaScript, das auf der Serverseite ausgeführt wird.
Node.js ist eine Plattform, die auf der Chrome JavaScript-Laufzeitumgebung basiert.
Node.js ist eine serverseitige ereignisgesteuerte I/O-JavaScript-Umgebung, die auf der V8-Engine von Google basiert. Die V8-Engine führt Javascript sehr schnell aus und bietet eine sehr gute Leistung.
Verstehen Sie grundsätzlich die anwendbaren Szenarien von NodeJS.
NodeJS ist in den letzten Jahren eine beliebte serverseitige JS-Plattform. Einerseits profitiert es von seiner hervorragenden Leistung bei der Verarbeitung hoher Parallelität im Backend Andererseits auf der nodeJS-Plattform Der Aufstieg leistungsstarker Code- und Projektmanagementanwendungen wie npm, grunt und express hat die Arbeitsmethoden und Prozesse des Front-Ends nahezu neu definiert.
Der Erfolg von NodeJS zeigt seine Stärke, aber sind nicht alle Situationen für die Verwendung von NodeJS als serverseitige Plattform geeignet?
Die Antwort ist natürlich nein, und im Internet gibt es unterschiedliche Meinungen. Dann lassen Sie uns die Anwendung von NodeJS vom Prinzip her verstehen.
Bevor wir über NodeJS sprechen, werfen wir zunächst einen Blick auf die Art und Weise, wie die traditionelle (repräsentiert durch Apache) serverseitige Verarbeitungsplattform mit Parallelität umgeht.
1. Apaches Multithread-Modus mit hoher Parallelität
Apache ist derzeit die weltweit führende Webserver-Software. Er wird von der Mehrheit der Servertechnologie-Entscheider begrüßt, da er Multithread-Parallelität unterstützt. Doch später offenbarte Apache nach und nach seine Mängel in einigen großen WEB-Anwendungen: Blockierung.
Einige Schüler fragen sich vielleicht, ob Apache die Parallelität mit mehreren Threads nicht beherrscht. Warum kommt es immer noch zu Blockierungen?
Um dies zu verstehen, müssen wir zunächst das Konzept der Threads verstehen
1.1 Was ist ein Thread?
Wir zitieren die offizielle Erklärung: Die kleinste CPU-Einheit, die Threads unabhängig ausführen können, kann gleichzeitig im selben Prozess ausgeführt werden und den Speicheradressraum des Prozesses gemeinsam nutzen (beachten Sie diese Funktion) .
Wir können sehen, dass Threads im selben Prozess dieselben Dateien und denselben Speicher (Speicheradressraum) gemeinsam nutzen. Sie können sich also vorstellen, dass verschiedene Threads, wenn sie dieselbe Variable belegen müssen, nach dem Prinzip „Wer zuerst kommt, mahlt zuerst“ zugewiesen werden -served-Basis: Wenn der Thread, der zuerst ankommt, ausgeführt wird, kann der spätere Thread nur abseits warten, dh er tritt der blockierenden Warteschlangensequenz bei. Das ist es also, was dazu führt, dass der Thread blockiert. Obwohl ein Prozess mehrere Threads unterstützen kann,scheinen diese gleichzeitig ausgeführt zu werden, sind aber nicht miteinander synchronisiert. Mehrere Threads in einem Prozess teilen sich denselben Speicheradressraum, was bedeutet, dass sie auf dieselben Variablen und Objekte zugreifen können und Objekte aus demselben Heap zuweisen. Obwohl dies den Informationsaustausch zwischen Threads erleichtert, muss der Programmierer darauf achten, dass andere Threads im selben Prozess nicht beeinträchtigt werden.
Nachdem wir die Mängel der Multithread-Parallelität verstanden haben, können wir die Leistungsfähigkeit von NodeJS besser verstehen. Weil NodeJS asynchron und Single-Threaded ist!2. Asynchrones E/A-Prinzip von NodeJS
Sehen wir uns zunächst einen Codeabschnitt für Apache an, um die Datenbank anzufordern: Wenn der Code bis zur ersten Zeile ausgeführt wird, wird der Thread blockiert. Warten Sie, bis die Abfrage das Ergebnis zurückgibt, und fahren Sie dann mit der Bearbeitung fort. Aus Gründen wie Datenbankabfragen, Lesen und Schreiben von Datenträgern und Netzwerkkommunikation (sogenannte E/A) ist die Blockierungszeit sehr groß (im Verhältnis zur gesamten CPU-Frequenz). Beim Zugriff mit hoher Parallelität werden einerseits Threads blockiert und lange gewartet, andererseits werden ständig neue Threads hinzugefügt, um neue Anforderungen zu bewältigen, was gleichzeitig viele Systemressourcen verschwendet , wird die Zunahme der Threads auch viel CPU-Zeit in Anspruch nehmen, um den Speicherkontext zu verarbeiten. Mal sehen, wie node.js damit umgeht. Sehen Sie,nur vier Worte: asynchroner Rückruf. Der zweite Parameter der Abfrage ist eine Rückruffunktion. Wenn der Prozess db.query ausführt, wartet er nicht auf die Rückgabe des Ergebnisses, sondern führt die folgenden Anweisungen direkt weiter aus, bis er in die Ereignisschleife eintritt. Wenn das Ergebnis der Datenbankausführung zurückgegeben wird, wird das Ereignis an die Ereigniswarteschlange gesendet und die vorherige Rückruffunktion wird erst aufgerufen, nachdem der Thread in die Ereignisschleife eintritt. Ein technischerer Begriff ist asynchrone E/A. Nur ein einzelner Thread ist in Ordnung.
Warum ist NodeJS dann Single-Threaded, kann aber eine asynchrone Implementierung erreichen? Hier gehen wir zum vorherigen Bild und klicken im Bild auf die Event-WarteschlangeSehen Sie, das Arbeitsprinzip von NodeJS ist eigentlich die Ereignisschleife. Man kann sagen, dass jeder Teil der NodeJS-Logik in der Rückruffunktion geschrieben ist und die Rückruffunktion nach der Rückkehr asynchron ausgeführt wird!
Wenn man das sieht, kommt man nicht umhin, sich zu fragen, ob es kein Erfolg wäre, wenn die gesamte Verarbeitung von NodeJS asynchron wäre. Falsch, falsch, falsch! Natürlich nicht, vergessen Sie nicht, die Grundlage für die Implementierung durch NodeJS ist Single-Thread. Genau, Single-Threaded! Ein Thread übernimmt alle Vorgänge!
Sie können sich vorstellen, dass NodeJS im kalten Wind einer Armee von 100.000 gleichzeitigen Benutzern gegenübersteht. Die auftauchenden Feinde werden in die Stadt geschleudert. Alle Menschen in der Stadt sind Soldaten und können diese Feinde sehr gut verdauen. Aber wenn ein Charakter wie Zhang Fei und Zhao Yun auftaucht, wird sich der alte Node elend fühlen. Er kämpft 300 Runden lang gegen Zhang Fei, verkrüppelt ihn und wirft ihn dann in die Stadt. Dann müssen die 100.000 Mann dahinter auf diese 300 Schuss warten. . .
Was bedeutet das also? Dies bedeutet, dass NodeJS nicht blockiert, die Blockierung jedoch nicht im nachfolgenden Rückrufprozess auftritt, sondern bei der Berechnung und Verarbeitung der Logik durch NodeJS selbst. Wir wissen bereits, dass NodeJS über äußerst leistungsstarke Verteilungsfunktionen verfügt und Ereignisse für asynchrone Rückrufe schleifen kann. Wenn Sie jedoch beim Schleifen von Ereignissen auf komplexe logische Operationen stoßen, wie kann ein dünner einzelner Thread dann Millionen von Logik- und Nebenläufigkeiten unterstützen? Alle zeitaufwändigen Vorgänge von NodeJS wie E/A und Netzwerkkommunikation können zur Ausführung und zum Rückruf an Arbeitsthreads übergeben werden, was sehr schnell ist. Dem normalen Betrieb der CPU kann sie jedoch nur aus eigener Kraft standhalten. Vor diesem Hintergrund haben Sie wahrscheinlich eine ungefähre Vorstellung von den Funktionen von NodeJS. Die anwendbaren Szenarien stehen also im Grunde schon bereit~! 3. Anwendungsszenarien für NodeJS Es muss lediglich asynchrone E/A bereitgestellt werden, sodass eine Hochleistungsverarbeitung mit hoher Parallelität erreicht werden kann. Es gibt viele Situationen, wie zum Beispiel: RESTFUL API, Echtzeit-Chat, Single-Page-APP mit starker Client-Logik. Spezifische Beispiele sind: lokalisierte Online-Musikanwendung, lokalisierte Online-Suchanwendung, lokalisierte Online-APP usw.
Apache wurde übrigens so sehr unterdrückt, also gib mir ein süßes Date. Apache verfügt über die Eigenschaften eines gemeinsam genutzten Speicheradressraums mit mehreren Threads und hoher Parallelität. Dies bedeutet, dass Apache sehr gut funktioniert, wenn der Server leistungsstark genug ist und der Prozessor über genügend Kerne verfügt, sodass er für die (gleichzeitige) asynchrone Verarbeitung relativ geeignet ist Wenige Hintergründe. Anwendungen mit großem Rechenaufwand und komplexer Backend-Geschäftslogik.
Empfohlenes Lernen: „node.js Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist node.js? Welche anwendbaren Szenarien gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!