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

Detaillierte Erklärung der Lösung für verweigerte Berechtigungen in Linux

Zugriff verweigert: Der Grund hierfür ist: Es lie...

Lösung für den erfolgreichen Start von MySQL, aber ohne Überwachung des Ports

Problembeschreibung MySQL wurde erfolgreich gesta...

Verwendung und Beschreibung des HTML-Tags tbody

Das Tbody-Element sollte in Verbindung mit den Ele...

Detaillierte Analyse des Event-Bubbling-Mechanismus in JavaScript

Was ist Blubbern? Es gibt drei Phasen im DOM-Erei...

Problem mit Zeitzonenfehler im Docker-Container

Inhaltsverzeichnis Hintergrund Frage Problemanaly...

Zusammenfassung der englischen Namen chinesischer Schriftarten

Wenn Sie in CSS die Eigenschaft „font-family“ ver...

JavaScript Canvas realisiert den Effekt des Neun-Quadrat-Rasterschneidens

In diesem Artikel wird der spezifische Code der L...

Besprechen Sie den Entwicklungstrend der Baidu Encyclopedia UI

<br />Die offizielle Version der Baidu-Enzyk...

Detaillierte Erklärung zur Verwendung des MySQL-Sicherungsskripts mysqldump

In diesem Artikel wird das MySQL-Sicherungsskript...

Anwendungsszenario für die MySQL-Konfiguration mehrerer Instanzen

Inhaltsverzeichnis Mehrere MySQL-Instanzen Übersi...

Eine kurze Analyse der Verwendung von USING und HAVING in MySQL

Dieser Artikel veranschaulicht anhand von Beispie...