国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Web-Frontend js-Tutorial Clustering und Worker-Threads – Node JS

Clustering und Worker-Threads – Node JS

Nov 26, 2024 am 12:22 AM

Clustering and Worker Threads - Node JS

In einem früheren Artikel ?Node JS Internals“ haben wir die interne Architektur von Node JS besprochen und auch erl?utert, warum wir die Thread-Pool-Gr??e des Knotens erh?hen sollten, um mehrere Anfragen gleichzeitig zu verarbeiten. Ich habe Ihnen gesagt, dass Skalierbarkeit und Leistung nichts mit der Thread-Pool-Gr??e zu tun haben.

Für Skalierbarkeit und hohe Leistung k?nnen wir Clustering und Worker-Threads verwenden.

Clustering

Angenommen, Sie nehmen an einer gro?en Hochzeit teil und Tausende von G?sten nehmen an der Hochzeit teil. Es gibt eine Küche und ein Koch bereitet das Essen für alle diese G?ste zu. Klingt unvorhersehbar, oder? Sie nutzen nicht alle Ressourcen der Küche aus, wenn Sie nur einen Koch haben.

Genau das passiert in einer Node JS-Anwendung, die auf einer Multicore-CPU l?uft, wenn nur ein Kern für die Bearbeitung aller Anfragen verwendet wird. Obwohl unsere Maschine also über die Leistung von Multicores ohne Clustering verfügt, l?uft unsere Anwendung auf nur einem Core. Ein Kern ist für die Abwicklung der gesamten Arbeit verantwortlich.

Wenn in Ihrer Küche mehrere K?che arbeiten, kommt es zu einer Clusterbildung.

Clustering ist eine Technik, die es einer einzelnen Node-JS-Anwendung erm?glicht, mehrere CPU-Kerne effektiv zu nutzen.

Um Clustering zu implementieren, müssen Sie ein Cluster-Modul von Node JS verwenden.

const cluster = require('cluster');

Mithilfe dieses Clustermoduls k?nnen Sie mehrere Instanzen unserer Node JS-Anwendung erstellen. Diese Instanzen werden Worker genannt. Alle Mitarbeiter nutzen denselben Server-Port und bearbeiten eingehende Anfragen gleichzeitig.

Es gibt zwei Arten von Prozessen in der Clusterarchitektur.

1.Master-Prozess:

Der Master-Prozess ist wie der Hauptkoch in der Küche, der die Arbeiter verwaltet. Es initialisiert die Anwendung, richtet die Clustering-Umgebung ein und delegiert au?erdem Aufgaben an Arbeitsprozesse. Bewerbungsanfragen werden nicht direkt bearbeitet.

Was macht der Master-Prozess?

  • Erstellt mehrere Arbeitsprozesse mithilfe der Methode ?cluster.fork()“. Au?erdem werden Worker neu gestartet, wenn sie abstürzen oder unerwartet beendet werden.

  • Es stellt sicher, dass eingehende Anfragen auf alle Arbeitsprozesse verteilt werden. Unter Linux übernimmt dies ein Betriebssystem und unter Windows fungiert Node JS selbst als Load Balancer.

  • Es erm?glicht die Kommunikation zwischen Arbeitern über IPC (Inter-Process Communication).

2.Arbeiterprozesse:

Worker-Prozesse sind die Instanz der Node JS-Anwendung, die vom Master-Prozess erstellt wurde. Jeder Prozess l?uft unabh?ngig auf einem separaten CPU-Kern und verarbeitet eingehende Anfragen.

Worker-Prozesse k?nnen nicht direkt miteinander kommunizieren, sie kommunizieren über den Master.

Der Arbeitsprozess verarbeitet die eingehende Anfrage und führt einige Aufgaben wie Datenbankabfragen, Berechnungen oder beliebige Anwendungslogik aus.

const cluster = require('cluster');

Hier überprüfen wir zun?chst, dass es sich um den Master-Prozess handelt. Wenn ja, werden Arbeitsprozesse erstellt.

In unserem Code erstelle ich einen Arbeitsprozess mit Cluster.fork().

Dies ist jedoch keine ideale M?glichkeit, einen Arbeitsprozess zu erstellen.

Angenommen, Sie erstellen 4 Arbeitsprozesse und Ihr System verfügt über zwei Kerne.

Um dieses Problem zu l?sen, anstatt hartcodierte Arbeitsprozesse zu erstellen, suchen Sie zun?chst die CPU-Kerne und berücksichtigen Sie dann, dass Daten Arbeitsprozesse erstellen.

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers
    cluster.fork();
    cluster.fork();
    cluster.fork();
    cluster.fork();

} else {
  console.log(`Worker ${process.pid} is running`);
  // Worker logic (e.g., server setup) goes here
}

Ich verwende ein Dual-Core-System, daher sieht die Ausgabe so aus.

const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);
  const numCPUs = os.cpus().length;

  // Fork workers
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  console.log(`Worker ${process.pid} is running`);
  // Worker logic (e.g., server setup) goes here
}

Nun haben Sie eine Frage: Wenn Sie eine Dual-Core-CPU haben, warum werden dann 4 Arbeitsprozesse erstellt?

Das liegt daran, dass die Anzahl der logischen Kerne 4 betr?gt. Meine CPU unterstützt Hyperthreading oder Simultaneous Multi-Threading (SMT).

Arbeitsthreads

Im Restaurant nimmt der Kellner die Bestellung entgegen und gibt sie an ein Kochteam weiter, da das Kochen einige Zeit in Anspruch nimmt. Wenn Tischreinigung oder andere kellnerbezogene Arbeiten anfallen, übernimmt der Kellner diese. Wenn die Bestellung fertig ist, gibt der Koch dem Kellner das Essen zurück und der Kellner serviert es dem Kunden.

Dies ist das gleiche Szenario im Zusammenhang mit Arbeitsthreads. Wenn rechenintensive Aufgaben wie umfangreiche Datenverarbeitung, komplexe Berechnungen oder umfangreiche Algorithmen anfallen, delegiert der Hauptthread diese Aufgabe an den Arbeitsthread. Der Worker führt diese Aufgabe aus, nicht der Hauptthread.

*Warum ist das hilfreich? *

Wir wissen, dass die Node JS-Ereignisschleife Single-Threaded ist und wenn diese schwere Rechenarbeit vom Hauptthread erledigt wird, wird die Ereignisschleife blockiert. Wenn Sie diese Worker-Threads verwenden, werden diese schweren Aufgaben an Worker-Threads übergeben, und Worker-Threads führen diese Aufgaben aus, nicht der Haupt-Thread, sodass die Ereignisschleife nicht blockiert wird.

Worker-Threads k?nnen über ein Message-Passing-System mit dem Haupt-Thread kommunizieren und Daten k?nnen mithilfe von strukturiertem Klonen (Deep Copy) zwischen Threads gesendet werden.

Jetzt versuchen wir, die Funktionsweise der Arbeitsthreads nachzuahmen.

main.js (Hauptthread)

Master 12345 is running
Worker 12346 is running
Worker 12347 is running
Worker 12348 is running
Worker 12349 is running

worker.js (Worker-Thread)

const { Worker } = require('worker_threads');

function startWorker() {
  const worker = new Worker('./worker.js'); // Create a worker using worker.js

  // Listen for messages from the worker
  worker.on('message', (message) => {
    console.log('Message from worker:', message);
  });

  // Handle errors in the worker
  worker.on('error', (error) => {
    console.error('Worker error:', error);
  });

  // Handle worker exit
  worker.on('exit', (code) => {
    console.log(`Worker exited with code ${code}`);
  });

  // Send a message to the worker
  worker.postMessage({ num: 100 });
}

startWorker();

Wenn Daten gro?e Strukturen enthalten, werden sie tief geklont und übergangen, was zu einem gewissen Leistungsaufwand führen kann.

Funktionsweise des Codes

  • Die Worker-Klasse wird verwendet, um neue Threads zu erzeugen.

  • Sie k?nnen mit worker.postMessage Daten an den Arbeiter senden und mit worker.on('message', callback) auf Nachrichten warten.

  • Im Worker-Thread ist parentPort die prim?re Schnittstelle für die Kommunikation mit dem Haupt-Thread.

  • Sie k?nnen auf Nachrichten vom Hauptthread (parentPort.on('message')) warten und Nachrichten mit parentPort.postMessage zurücksenden.

Die Ausgabe wird sein:

const cluster = require('cluster');

Jetzt haben Sie auch eine Frage: Warum erstellen wir nicht Hunderte von Arbeitsthreads?

Der Grund dafür ist jedoch, dass, wenn Sie mehr Threads erstellen, als es Kerne gibt, die Threads um CPU-Zeit konkurrieren, was zu einem Kontextwechsel führt, der teuer ist und die Gesamtleistung verringert.

Wann sollten Sie Clustering, Worker-Threads oder beides in Node.js verwenden?

1. Wann werden Worker-Threads verwendet?

  • CPU-gebundene Aufgaben:

Aufgaben beinhalten umfangreiche Berechnungen, wie z. B. Bild-/Videoverarbeitung, Datenkomprimierung oder -verschlüsselung, maschinelle Lerninferenz, wissenschaftliche Berechnungen

  • Shared Memory ist erforderlich:

Sie müssen Daten effizient zwischen Threads teilen, ohne sie zu duplizieren.

  • Single-Core-Nutzung:

Wenn Ihre Anwendung nur innerhalb eines einzelnen Prozesses skaliert werden muss, aber dennoch Parallelit?t für CPU-intensive Aufgaben ben?tigt.

2.Wann sollte Clustering verwendet werden?

  • E/A-gebunden:

Zu den Aufgaben geh?rt die Bearbeitung einer gro?en Anzahl von Client-Anfragen, z. B. Web, Server, Chat-Anwendungen und APIs. Clustering hilft bei der horizontalen Skalierung, indem Anfragen auf alle CPU-Kerne verteilt werden.

  • Isolierter Speicher:

Ihre Anwendung muss nicht viele Daten zwischen Prozessen teilen.

  • Multi-Core-Nutzung:

Sie m?chten alle verfügbaren Kerne nutzen, indem Sie mehrere Node.js-Prozesse erzeugen.

3.Wann sollten sowohl Clustering als auch Worker-Threads verwendet werden?

  • E/A-gebundene CPU-gebundene Aufgaben:

Die Anwendung verarbeitet HTTP-Anfragen, entlastet jedoch rechenintensive Aufgaben. Beispiel: Ein Webserver verarbeitet Datei-Uploads und führt eine Bildgr??en?nderung oder Videotranskodierung durch.

  • Hohe Skalierbarkeit:

Für einen hohen Durchsatz ben?tigen Sie Parallelit?t sowohl auf Prozessebene als auch auf Thread-Ebene. Auf einer E-Commerce-Site stellt Clustering sicher, dass mehrere Prozesse eingehende Anfragen verarbeiten. Worker-Threads verarbeiten Hintergrundaufgaben wie das Generieren personalisierter Empfehlungen.

Vielen Dank.

Stellen Sie gerne Ihre Frage oder machen Sie Vorschl?ge.

Wenn Sie das informativ fanden, dann m?gen Sie es.

Das obige ist der detaillierte Inhalt vonClustering und Worker-Threads – Node JS. 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

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Wie stelle ich eine HTTP -Anforderung in node.js? Wie stelle ich eine HTTP -Anforderung in node.js? Jul 13, 2025 am 02:18 AM

Es gibt drei g?ngige M?glichkeiten, HTTP-Anforderungen in Node.js zu initiieren: Verwenden Sie integrierte Module, Axios und Knotenfetch. 1. Verwenden Sie das integrierte HTTP/HTTPS-Modul ohne Abh?ngigkeiten, das für grundlegende Szenarien geeignet ist, jedoch eine manuelle Verarbeitung von Datengen?hten und Fehlerüberwachung erfordert, z. 2.Axios ist eine auf Versprechen basierende Bibliothek von Drittanbietern. Es verfügt über eine kurze Syntax und leistungsstarke Funktionen, unterstützt Async/Auseait, automatische JSON -Konvertierung, Interceptor usw. Es wird empfohlen, asynchrone Anforderungsvorg?nge zu vereinfachen. 3.Node-Fetch bietet einen Stil ?hnlich dem Browser-Abruf, basierend auf Versprechen und einfacher Syntax

JavaScript -Datentypen: Primitive VS -Referenz JavaScript -Datentypen: Primitive VS -Referenz Jul 13, 2025 am 02:43 AM

JavaScript -Datentypen sind in primitive Typen und Referenztypen unterteilt. Zu den primitiven Typen geh?ren String, Anzahl, Boolesche, Null, undefiniertes und Symbol. Die Werte sind unver?nderlich und Kopien werden bei der Zuweisung von Werten kopiert, sodass sie sich nicht gegenseitig beeinflussen. Referenztypen wie Objekte, Arrays und Funktionen speichern Speicheradressen, und Variablen, die auf dasselbe Objekt zeigen, wirkt sich gegenseitig aus. Typeof und Instanz k?nnen verwendet werden, um die Typen zu bestimmen, aber auf die historischen Probleme der TypeOfnull zu achten. Das Verst?ndnis dieser beiden Arten von Unterschieden kann dazu beitragen, einen stabileren und zuverl?ssigeren Code zu schreiben.

JavaScript Time Object, jemand erstellt eine EACTEXE, schnellere Website auf Google Chrome usw. JavaScript Time Object, jemand erstellt eine EACTEXE, schnellere Website auf Google Chrome usw. Jul 08, 2025 pm 02:27 PM

Hallo, JavaScript -Entwickler! Willkommen in den JavaScript -Nachrichten dieser Woche! Diese Woche konzentrieren wir uns auf: Oracas Markenstreit mit Deno, neue JavaScript -Zeitobjekte werden von Browsern, Google Chrome -Updates und einigen leistungsstarken Entwickler -Tools unterstützt. Fangen wir an! Der Markenstreit von Oracle mit dem Versuch von Deno Oracle, ein "JavaScript" -Marke zu registrieren, hat Kontroversen verursacht. Ryan Dahl, der Sch?pfer von Node.js und Deno, hat eine Petition zur Absage der Marke eingereicht, und er glaubt, dass JavaScript ein offener Standard ist und nicht von Oracle verwendet werden sollte

Handlingversprechen: Verkettung, Fehlerbehandlung und Versprechenkombinatoren in JavaScript Handlingversprechen: Verkettung, Fehlerbehandlung und Versprechenkombinatoren in JavaScript Jul 08, 2025 am 02:40 AM

Versprechen ist der Kernmechanismus für den Umgang mit asynchronen Operationen in JavaScript. Das Verst?ndnis von Kettenanrufen, Fehlerbehebung und Kombination ist der Schlüssel zum Beherrschen ihrer Anwendungen. 1. Der Kettenaufruf gibt ein neues Versprechen durch .then () zurück, um asynchrone Prozessverkampferung zu realisieren. Jeder. Dann () erh?lt das vorherige Ergebnis und kann einen Wert oder ein Versprechen zurückgeben; 2. Die Fehlerbehandlung sollte .Catch () verwenden, um Ausnahmen zu fangen, um stille Ausf?lle zu vermeiden, und den Standardwert im Fang zurückgeben, um den Prozess fortzusetzen. 3. Combinatoren wie Promise.All () (erfolgreich erfolgreich erfolgreich nach allen Erfolg), Versprechen.Race () (Die erste Fertigstellung wird zurückgegeben) und Versprechen.Allsettled () (Warten auf alle Fertigstellungen)

Was ist die Cache -API und wie wird sie bei Dienstangestellten verwendet? Was ist die Cache -API und wie wird sie bei Dienstangestellten verwendet? Jul 08, 2025 am 02:43 AM

Cacheapi ist ein Tool, das der Browser zur Cache -Netzwerkanfragen bereitstellt, das h?ufig in Verbindung mit dem Servicearbeiter verwendet wird, um die Leistung der Website und die Offline -Erfahrung zu verbessern. 1. Es erm?glicht Entwicklern, Ressourcen wie Skripte, Stilbl?tter, Bilder usw. Zu speichern; 2. Es kann die Cache -Antworten entsprechend den Anfragen übereinstimmen. 3. Es unterstützt das L?schen bestimmter Caches oder das L?schen des gesamten Cache. 4.. Es kann Cache -Priorit?ts- oder Netzwerkpriorit?tsstrategien durch Servicearbeiter implementieren, die sich auf Fetch -Ereignisse anh?ren. 5. Es wird h?ufig für die Offline -Unterstützung verwendet, die wiederholte Zugriffsgeschwindigkeit, die Vorspannungs -Schlüsselressourcen und den Inhalt des Hintergrundaktualisierungss beschleunigen. 6. Wenn Sie es verwenden, müssen Sie auf die Cache -Versionskontrolle, Speicherbeschr?nkungen und den Unterschied zum HTTP -Caching -Mechanismus achten.

JS Roundup: Ein tiefes Eintauchen in die JavaScript -Ereignisschleife JS Roundup: Ein tiefes Eintauchen in die JavaScript -Ereignisschleife Jul 08, 2025 am 02:24 AM

Die Ereignisschleife von JavaScript verwaltet asynchrone Vorg?nge, indem sie Call -Stapel, Webapis und Task -Warteschlangen koordinieren. 1. Der Anrufstack führt synchronen Code aus, und wenn er auf asynchrone Aufgaben begegnet, wird er zur Verarbeitung an Webapi übergeben. 2. Nachdem das Webapi die Aufgabe im Hintergrund abgeschlossen hat, wird der Rückruf in die entsprechende Warteschlange (Makroaufgabe oder Micro -Aufgabe) eingebaut. 3. Die Ereignisschleife prüft, ob der Anrufstapel leer ist. Wenn es leer ist, wird der Rückruf aus der Warteschlange herausgenommen und zur Ausführung in den Anrufstapel geschoben. V. 5. Das Verst?ndnis der Ereignisschleife hilft zu vermeiden, den Haupt -Thread zu blockieren und die Codeausführungsreihenfolge zu optimieren.

Ereignis verstehen und in JavaScript DOM -Ereignissen sprudeln und erfassen Ereignis verstehen und in JavaScript DOM -Ereignissen sprudeln und erfassen Jul 08, 2025 am 02:36 AM

Ereignisblasen verbreiten sich vom Zielelement nach au?en zum Vorfahrknoten aus, w?hrend Ereignisfassungen sich von der ?u?eren Schicht nach innen zum Zielelement ausbreiten. 1. Ereignisblasen: Nach dem Klicken auf das untergeordnete Element l?st das Ereignis den H?rer des übergeordneten Elements nach oben aus. Nach dem Klicken auf die Schaltfl?che gibt es beispielsweise zuerst die untergeordnete und dann entzündete Eltern aus. 2. Ereigniserfassung: Stellen Sie den dritten Parameter auf True ein, so dass der H?rer in der Erfassungsstufe ausgeführt wird, z. B. das Ausl?sen des Capture -Listeners des übergeordneten Elements, bevor Sie auf die Schaltfl?che klicken. 3. Praktische Verwendungszwecke umfassen ein einheitliches Management von Ereignissen für Kinderelemente, Vorverarbeitung und Leistungsoptimierung von Abfangen. V.

Eine JS-Zusammenfassung von Funktionen h?herer Ordnung jenseits der Karte und des Filters Eine JS-Zusammenfassung von Funktionen h?herer Ordnung jenseits der Karte und des Filters Jul 10, 2025 am 11:41 AM

In JavaScript -Arrays gibt es zus?tzlich zu MAP und Filter andere leistungsstarke und selten verwendete Methoden. 1. Reduzierung kann nicht nur summieren, sondern auch z?hlen, gruppen, flach Arrays ab und bauen neue Strukturen auf. 2. FindingIndex werden verwendet, um einzelne Elemente oder Indizes zu finden. 3. Einige und alles werden verwendet, um festzustellen, ob Bedingungen bestehen oder sich alle treffen. 4. SORT kann sortiert werden, wechselt aber das ursprüngliche Array. 5. Achten Sie darauf, das Array zu kopieren, wenn Sie es verwenden, um Nebenwirkungen zu vermeiden. Diese Methoden machen den Code pr?gnanter und effizienter.

See all articles