So nutzen Sie die Multi-Core-CPU in node.js voll aus

So nutzen Sie die Multi-Core-CPU in node.js voll aus

Überblick

Nodejs basiert auf der V8-Engine des Chrome-Browsers, was bedeutet, dass sein Modell dem des Browsers ähnelt. Unser JavaScript wird in einem einzelnen Thread in einem einzelnen Prozess ausgeführt.

Allerdings stellt die Single-Process- und Single-Thread-Struktur der V8-Engine keine perfekte Struktur dar. Heutzutage sind CPUs grundsätzlich Multi-Core-Prozessoren. Echte Server verfügen häufig über mehrere CPUs (so hat beispielsweise unsere physische Online-Maschine 12 Kerne), sodass sich bei der tatsächlichen Anwendung von Nodejs die Frage stellt: „Wie kann ich den vollen Nutzen aus Servern mit Mehrkern-CPUs ziehen?“

Streng genommen ist Node keine echte Single-Thread-Architektur, da Node selbst über I/O-Threads (Netzwerk-I/O, Festplatten-I/O) verfügt. Diese I/O-Threads werden von der untergeordneten libuv verwaltet, die für JavaScript-Entwickler transparent ist. JavaScript-Code wird immer auf V8 ausgeführt und ist ein Single-Thread. Oberflächlich betrachtet ist NodeJS also ein Single-Thread.

So nutzen Sie die Multi-Core-CPU in node.js voll aus

Angesichts des Problems der geringen Multi-Core-Auslastung von Einzelprozessen und Einzelthreads kann gemäß früheren Erfahrungen jeder Prozess eine CPU verwenden, um die Auslastung von Multi-Core-CPUs zu realisieren. Node stellt das Modul child_process sowie die Methode fork() bereit, um die Prozessreplikation zu implementieren (für die Replikation des Prozesses sind bestimmte Ressourcen und Zeit erforderlich. Node benötigt für die Replikation des Prozesses mindestens 10 MB Speicher und mindestens 30 ms).

Eine solche Lösung ist der klassischste Master-Worker-Modus auf *nix-Systemen, auch als Master-Slave-Modus bekannt.

Diese verteilte Architektur eines typischen Geschäftsmodells mit paralleler Verarbeitung weist eine gute Skalierbarkeit (Skalierbarkeit wird eigentlich im Zusammenhang mit parallelen Algorithmen und paralleler Computerarchitektur diskutiert. Die Skalierbarkeit eines Algorithmus auf einer bestimmten Maschine gibt an, ob der Algorithmus die zunehmende Anzahl von CPUs effektiv nutzen kann.) und Stabilität auf.

Der Hauptprozess ist nicht für die spezifische Geschäftsabwicklung verantwortlich, sondern für die Planung und Verwaltung des Arbeitsprozesses. Der Arbeitsprozess ist für die spezifische Geschäftsabwicklung verantwortlich, daher müssen Entwickler auf die Stabilität des Arbeitsprozesses achten.

Der von fork() kopierte Prozess ist ein unabhängiger Prozess, der über eine unabhängige und brandneue V8-Instanz verfügt. Obwohl Node fork() bereitstellt, um den Prozess zu kopieren, sodass jeder CPU-Kern verwendet werden kann, sollte man dennoch bedenken, dass der fork()-Prozess sehr teuer ist. Glücklicherweise kann Node ereignisgesteuert große gleichzeitige Anfragen in einem einzigen Thread verarbeiten.

Hinweis: Das Starten mehrerer Prozesse dient hier nur der vollen Nutzung der CPU-Ressourcen und nicht der Lösung von Parallelitätsproblemen.

4 Möglichkeiten zum Erstellen von untergeordneten Prozessen in Node

1. spawn()

Erstellen Sie einen Unterprozess zum Ausführen des Befehls

2. exec()

Erstellen Sie einen untergeordneten Prozess, um den Befehl auszuführen. Der Unterschied zu spawn() besteht darin, dass die Methodenparameter unterschiedlich sind. Es kann eine Rückruffunktion übergeben werden, um den Status des untergeordneten Prozesses abzurufen.

3. execFile()

Startet einen Unterprozess zum Ausführen der angegebenen Datei. Beachten Sie, dass das SHEBANG-Symbol (#!) oben in der Datei deklariert werden muss, um den Prozesstyp anzugeben.

4. Gabel ()

Ähnlich wie spawn(), der Unterschied besteht darin, dass nur das JavaScript-Dateimodul ausgeführt werden muss, um einen untergeordneten Node-Prozess zu erstellen.

Hinweis: Die folgenden drei Methoden sind erweiterte Anwendungen von spawn().

Oben finden Sie Einzelheiten dazu, wie node.js Multi-Core-CPUs voll ausnutzen kann. Weitere Informationen dazu, wie node.js Multi-Core-CPUs voll ausnutzen kann, finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Eine kurze Einführung in das Front-End-Progressive-Framework VUE
  • Detaillierte Erklärung des Beispielcodes des Vuex Progressive-Tutorials
  • Detaillierte Erläuterung der Konfiguration der Spring Boot-Webanwendung
  • Beispielcode zum Erstellen einer Webanwendung mit Spring Boot
  • Fehlerbehebung bei hohem Speicherverbrauch von NodeJs, tatsächlicher Kampfrekord
  • Detaillierte Erläuterung der Verwendung des in Nodejs integrierten Verschlüsselungsmoduls zur Peer-to-Peer-Verschlüsselung und -Entschlüsselung
  • Implementierung integrierter Module und benutzerdefinierter Module in Node.js
  • Zusammenfassung einiger Tipps zum Umgehen der Node.js-Codeausführung
  • So entwickeln Sie eine Progressive Web App (PWA)

<<:  So erstellen Sie schnell eine LAMP-Umgebung auf der CentOS-Plattform

>>:  Detaillierte Erläuterung der Apache-Website-Dienstkonfiguration basierend auf Linux

Artikel empfehlen

Sollte ich für das mobile Web-WAP Bootstrap oder jQuery Mobile verwenden?

Lösung des Problems Bootstrap ist ein CSS-Framewo...

So implementieren Sie eine einzelne Dateikomponente in JS

Inhaltsverzeichnis Überblick Einzelne Dateikompon...

CentOS verwendet expect, um Skripte und Befehle remote in Stapeln auszuführen

Manchmal müssen wir Server stapelweise bedienen, ...

Vue implementiert QR-Code-Scanfunktion (mit Stil)

brauchen: Verwenden Sie Vue, um das Scannen von Q...

Vue verwendet Monaco, um Codehervorhebung zu erreichen

Mithilfe der Vue-Sprache und Elementkomponenten m...

Designtheorie: Textausdruck und Benutzerfreundlichkeit

<br />Beim Textdesign konzentrieren wir uns ...

Erste Erfahrungen mit der Texterstellung mit Javascript Three.js

Inhaltsverzeichnis Wirkung Beginnen Sie mit der T...

Praxis der Verwendung von SuperMap in Vue

Inhaltsverzeichnis Vorwort Ressourcen zum Thema V...

Vue implementiert die Seiten-Caching-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierte Schritte zur Installation von Anaconda unter Linux (Ubuntu 18.04)

Anaconda ist die beliebteste Python-Plattform für...

Einfaches HTML-Applet für Einkaufsmengen

Dieser Artikel stellt Ihnen ein einfaches HTML-Ap...