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

Nginx-Dienst 500: Interner Serverfehler einer der Gründe

500 (Interner Serverfehler) Auf dem Server ist ei...

Detailliertes Beispiel zum Ändern des Linux-Kontokennworts

Passwort des persönlichen Kontos ändern Wenn norm...

Detaillierte Erklärung der Interaktion zwischen React Native und IOS

Inhaltsverzeichnis Voraussetzungen RN übergibt We...

Lösung für langsame Netzwerkanforderungen im Docker-Container

Bei der Verwendung von Docker wurden mehrere Prob...

Sechs Methoden zur Nginx-Optimierung

1. Optimieren Sie die Nginx-Parallelität [root@pr...

CSS3-Zeitleistenanimation

Ergebnisse erzielen html <h2>CSS3-Zeitleist...

So erstellen Sie dynamische QML-Objekte in JavaScript

1. Objekte dynamisch erstellen Es gibt zwei Mögli...

10 hervorragende Web-UI-Bibliotheken/Frameworks

1. IT Mill-Toolkit IT Mill Toolkit ist ein Open-S...

Detaillierte Erklärung der Tomcat-Verzeichnisstruktur

Inhaltsverzeichnis Verzeichnisstruktur bin-Verzei...

So verwenden Sie Javascript zum Erstellen einfacher Algorithmen

Inhaltsverzeichnis 1 Frage 2 Methoden 3 Experimen...