Sobes.tech
Middle — Middle+

Jak zoptymalizować wykonanie zasobożernej operacji matematycznej w środowisku asynchronicznym jednordzeniowym, aby nie blokowała głównej pętli zdarzeń?

sobes.tech AI

Odpowiedź od AI

W środowisku asynchronicznym jednordzeniowym, takim jak Node.js, obliczenia zasobożerne blokują główną pętlę zdarzeń, co powoduje opóźnienia w obsłudze innych żądań. Aby tego uniknąć:

  • Przenieś obliczenia do osobnego wątku lub procesu, używając Worker Threads lub child_process.
  • Użyj asynchronicznych kolejek zadań, które rozkładają obciążenie.

Przykład z użyciem 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 zatrzymany z kodem wyjścia ${code}`));
    });
  });
}

// W głównym pliku
runHeavyComputation(inputData).then(result => {
  console.log('Wynik:', result);
});

W ten sposób główna pętla zdarzeń pozostaje wolna do obsługi innych zadań.