Sobes.tech
Middle — Middle+

Wie kann man die Ausführung einer ressourcenintensiven mathematischen Operation in einer single-threaded asynchronen Umgebung optimieren, damit sie den Haupt-Ereignisschleife nicht blockiert?

sobes.tech KI

Antwort von AI

In einer single-threaded asynchronen Umgebung wie Node.js blockieren ressourcenintensive Berechnungen den Haupt-Ereignisschleife, was zu Verzögerungen bei der Bearbeitung anderer Anfragen führt. Um dies zu vermeiden:

  • Verschieben Sie die Berechnungen in einen separaten Thread oder Prozess, unter Verwendung von Worker Threads oder child_process.
  • Verwenden Sie asynchrone Aufgabenwarteschlangen, die die Last verteilen.

Beispiel mit Worker Threads:

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

function runHeavyComputation(data) {
  return new Promise((resolve, reject) => {
    const worker = new Worker('./heavyComputation.js', { workerData: data });
    worker.on('message', resolve);
    worker.on('error', reject);
    worker.on('exit', (code) => {
      if (code !== 0) reject(new Error(`Worker gestoppt mit Exit-Code ${code}`));
    });
  });
}

// Im Hauptdatei
runHeavyComputation(inputData).then(result => {
  console.log('Ergebnis:', result);
});

Auf diese Weise bleibt die Haupt-Ereignisschleife frei, um andere Aufgaben zu verarbeiten.