Node.js: Event Loop, Prozesse und Worker Threads

  • 03 Sep 2025
  • CODLAB Team
  • 2 min

Node.js verarbeitet viele asynchrone Vorgänge über eine Ereignisschleife. Das funktioniert gut, solange lange synchrone Aufgaben diese Schleife nicht blockieren. Mehr Prozesse oder Threads lösen eine andere Aufgabe und müssen zur Anwendung sowie zum verfügbaren System passen.

Die Reihenfolge von Aufgaben verstehen

Das folgende Beispiel ist für eine eigenständige CommonJS-Datei gedacht. Die synchrone Ausgabe erfolgt zuerst, anschließend der Callback von process.nextTick() und dann setImmediate(). Andere Modul- und Aufrufkontexte können für detaillierte Reihenfolgen relevant sein.

// Beispiel zur Veranschaulichung der Ereignisschleife
setImmediate(() => {
  console.log('setImmediate-Callback');
});
process.nextTick(() => {
  console.log('nextTick-Callback');
});
console.log('Synchrone Ausgabe');

Prozesse mit Cluster verteilen

Das Beispiel startet mehrere Prozesse, die einen HTTP-Port nutzen. Die Zahl ist an die verfügbaren CPU-Kerne gebunden; für einen realen Dienst müssen Sie die Ressourcen und Last gesondert prüfen. Das Beispiel enthält kein vollständiges Konzept für Neustarts oder Ausfallsicherheit.

// Ein einfaches Beispiel für Clustering in Node.js
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isPrimary) {
  console.log(`Master ${process.pid} wird gestartet`);

  // Fork workers.
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} beendet`);
  });
} else {
  // Workers können jede Art von Server teilen
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('Hallo Welt\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} gestartet`);
}

Worker Threads für passende Rechenarbeit

Worker Threads können JavaScript-Arbeit außerhalb der Hauptschleife ausführen. Der Datenaustausch und der Aufbau eines Workers verursachen eigenen Aufwand. Ein Worker-Pool, eine begrenzte Warteschlange und ein geplanter Umgang mit Fehlern sind daher für einen Dienst oft wichtiger als das bloße Starten zusätzlicher Threads.

Prüfen Sie vor einer Änderung, ob der Engpass Rechenarbeit, Datenbankzugriff oder eine andere Wartezeit ist. Messen Sie die ursprüngliche Aufgabe erneut, wenn Sie den Ablauf verändern. Überwachen Sie Speicherverbrauch und das Verhalten bei Fehlern sowie beim Herunterfahren des Dienstes.

Weiterführende Dokumentation: Node.js: Event Loop.

Weiterführende Dokumentation: Node.js: Worker Threads.

Teilen Sie diesen Artikel

Kunden

Noch keine Kommentare. Schreiben Sie den ersten!

Einen Kommentar hinterlassen

Wird nicht veröffentlicht

Verwandte Artikel

Projekt im Kopf?

Wir entwickeln maßgeschneiderte Software und KI-Lösungen. Lassen Sie uns gemeinsam Ihr nächstes Projekt starten.

Kostenloses Erstgespräch