Sobes.tech
Middle — Middle+

Cum se poate optimiza executarea unei operații matematice intensive în resurse într-un mediu asincron cu un singur fir pentru a nu bloca ciclul principal de evenimente?

sobes.tech AI

Răspuns de la AI

Într-un mediu asincron cu un singur fir, cum ar fi Node.js, calculele intensive în resurse blochează bucla principală de evenimente, ceea ce duce la întârzieri în procesarea altor solicitări. Pentru a evita acest lucru:

  • Mută calculele într-un fir sau proces separat, folosind Worker Threads sau child_process.
  • Folosește cozi de sarcini asincrone care distribuie sarcina.

Exemplu cu 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 oprit cu codul de ieșire ${code}`));
    });
  });
}

// În fișierul principal
runHeavyComputation(inputData).then(result => {
  console.log('Rezultat:', result);
});

Astfel, bucla principală de evenimente rămâne liberă pentru a procesa alte sarcini.