Heim > Web-Frontend > js-Tutorial > Eine Einführung in Node.js Multithreading

Eine Einführung in Node.js Multithreading

Lisa Kudrow
Freigeben: 2025-02-08 13:14:10
Original
854 Leute haben es durchsucht

An Introduction to Node.js Multithreading

Kernpunkte

  • JavaScript Runtime verwendet eine einzelne Thread-Verarbeitung, die bei der Bearbeitung mehrerer Benutzeranforderungen Engpässe für node.js-Anwendungen verursachen kann. Multithreading verhindert diese Engpässe.
  • node.js Worker -Threads ermöglichen eine asynchrone Verarbeitung auf separaten Threads, wodurch die Leistung verbessert wird. Sie können jedoch keine komplexen Objekte wie Datenbankverbindungen verarbeiten und müssen beim Übergang an und vom Arbeiter -Thread serialisiert werden.
  • node.js untergeordnetes Prozess kann eine andere Anwendung starten, Daten übergeben und Ergebnisse erhalten. Sie sind nicht so effizient wie Arbeiterfäden und prozessinterer, können jedoch verwendet werden, wenn sie auf externe Prozesse von Node.js.
  • node.js cluster ermöglicht das Abgabelad für denselben Prozess, um die Last effizienter zu verarbeiten. Sie können auch Neustarts abwickeln, wenn Instanzen versagen, und zwischen gabelhaften Prozessen kommunizieren, aber der Code kann immer komplexer werden.
  • Prozessmanager und Containerorchestrierung können mehrere Antragsinstanzen von Node.JS ausführen, ohne Clustercode zu schreiben, daher sind sie ideal für Echtzeit-Server. Container simulieren Betriebssysteme, sodass Anwendungen auf einem einzigen Gerät oder auf Tausenden von Maschinen ausgeführt werden können.

JavaScript Runtime verwendet eine einzelne Thread -Verarbeitung. Der Motor führt jeweils nur einen Betrieb durch und muss die Ausführung ausführen, um einen anderen Betrieb auszuführen. Dies verursacht selten Probleme im Browser, da ein einzelner Benutzer mit der Anwendung interagiert. Die Anwendung node.js kann jedoch Hunderte von Benutzeranfragen verarbeiten. Multithreading kann Engpässe in Ihrer Bewerbung verhindern. Betrachten Sie eine Node.js-Webanwendung, bei der ein einzelner Benutzer eine komplexe 10-Sekunden-JavaScript-Berechnung auslösen kann. Bis diese Berechnung abgeschlossen ist, kann die Anwendung eingehende Anforderungen von anderen Benutzern nicht bearbeiten. Sprachen wie PHP und Python sind ebenfalls Single-Threaded, verwenden jedoch normalerweise einen Multi-Thread-Webserver, der auf jeder Anfrage eine neue Instanz des Interpreters startet. Dies ist ressourcenintensiv, daher bieten Node.js -Anwendungen normalerweise ihren eigenen leichten Webserver an. Der Webserver node.js wird auf einem einzigen Thread ausgeführt, aber JavaScript mildert Leistungsprobleme mit seiner nicht blockierenden Ereignisschleife. Anwendungen können asynchrone Operationen wie Dateien, Datenbanken und HTTP ausführen, die auf anderen Threads für Betriebssysteme ausgeführt werden. Die Ereignisschleife läuft weiterhin und kann andere JavaScript -Aufgaben erledigen, während Sie auf die E/A -Operation warten. Leider kann der langjährige JavaScript-Code (z. B. Bildverarbeitung) die aktuelle Iteration der Ereignisschleife in Anspruch nehmen. In diesem Artikel wird erläutert, wie die Verarbeitung mit den folgenden Methoden auf einen anderen Thread übertragen wird: - Worker -Thread - Subprozess - Cluster - Process Manager - Container

node.js Worker -Thread

Arbeitsthreads entsprechen Web Worker in node.js. Der Haupt -Thread übergibt die Daten an ein anderes Skript, das es (asynchron) in einem separaten Thread verarbeitet. Der Haupt -Thread läuft weiter und führt ein Rückrufereignis aus, wenn der Worker -Thread seine Arbeit abschließt.

An Introduction to Node.js Multithreading

Beachten Sie, dass JavaScript seinen strukturierten Klonierungsalgorithmus verwendet, um Daten in Zeichenfolgen zu serialisieren, wenn Daten an und von Worker -Threads weitergegeben werden. Es kann native Typen wie Zeichenfolgen, Zahlen, Boolesche, Arrays und Objekte enthalten - , aber nicht Funktionen . Sie werden nicht in der Lage sein, komplexe Objekte zu übergeben - z. B. Datenbankverbindungen -, da die meisten Objekte Methoden haben, die nicht kloniert werden können. Sie können jedoch:- Lesen Sie die Datenbankdaten asynchron im Hauptthread und übergeben die Ergebnisdaten an den Worker-Thread. - Erstellen Sie ein anderes Verbindungsobjekt im Arbeiter -Thread. Dies entspricht Startkosten, kann jedoch möglich sein, wenn Ihre Funktion im Rahmen der Berechnung weitere Datenbankabfragen erfordert.

node.js Worker -Thread -API ähnelt konzeptionell der Web Workers -API im Browser, es gibt jedoch Syntaxunterschiede. Sowohl Deno als auch Bun unterstützen Browser und Node.js -APIs.

Arbeitsthreaddemonstration

Die folgende Demonstration zeigt einen Node.js -Prozess, der die aktuelle Zeit in jeder Sekunde in die Konsole schreibt: Öffnen Sie die Demonstration von Node.js in einer neuen Browser -Registerkarte. Starten Sie dann eine langjährige Würfelrollenberechnung auf dem Hauptfaden. Die Schleife vervollständigt 100 Millionen Iterationen, die den Zeitpunkt der Zeit stoppen:

<code>timer process 12:33:18 PM
timer process 12:33:19 PM
timer process 12:33:20 PM
NO THREAD CALCULATION STARTED...
┌─────────┬──────────┐
│ (index) │  Values  │
├─────────┼──────────┤
│    2    │ 2776134  │
│    3    │ 5556674  │
│    4    │ 8335819  │
│    5    │ 11110893 │
│    6    │ 13887045 │
│    7    │ 16669114 │
│    8    │ 13885068 │
│    9    │ 11112704 │
│   10    │ 8332503  │
│   11    │ 5556106  │
│   12    │ 2777940  │
└─────────┴──────────┘
processing time: 2961ms
NO THREAD CALCULATION COMPLETE

timer process 12:33:24 PM
</code>
Nach dem Login kopieren
Nach Abschluss

wird die gleiche Berechnung mit dem Arbeiter -Thread gestartet. Bei der Verarbeitung von Würfeln wird die Uhr weiter ausgeführt:

<code>WORKER CALCULATION STARTED...
  timer process 12:33:27 PM
  timer process 12:33:28 PM
  timer process 12:33:29 PM
┌─────────┬──────────┐
│ (index) │  Values  │
├─────────┼──────────┤
│    2    │ 2778246  │
│    3    │ 5556129  │
│    4    │ 8335780  │
│    5    │ 11114930 │
│    6    │ 13889458 │
│    7    │ 16659456 │
│    8    │ 13889139 │
│    9    │ 11111219 │
│   10    │ 8331738  │
│   11    │ 5556788  │
│   12    │ 2777117  │
└─────────┴──────────┘
processing time: 2643ms
WORKER CALCULATION COMPLETE

  timer process 12:33:30 PM
</code>
Nach dem Login kopieren

Der Arbeitsprozess ist etwas schneller als der Hauptfaden, da er sich auf eine Aufgabe konzentrieren kann.

... (Der verbleibende Inhalt wird weggelassen, da die Länge zu lang ist. Die Kernidee wurde früher zusammengefasst. Der nachfolgende Inhalt ist Code -Beispiele und detailliertere Erklärungen. Sie können den Originaltext nach Bedarf selektiv lesen.)

Das obige ist der detaillierte Inhalt vonEine Einführung in Node.js Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage