Sobes.tech
Middle — Middle+

Como otimizar a execução de uma operação matemática intensiva em recursos num ambiente assíncrono de thread único para que ela não bloqueie o ciclo de eventos principal?

sobes.tech IA

Resposta da IA

Numa ambiente assíncrono de thread único, como o Node.js, cálculos intensivos bloqueiam o ciclo de eventos principal, levando a atrasos no processamento de outras solicitações. Para evitar isso:

  • Transferir os cálculos para uma thread ou processo separado, usando Worker Threads ou child_process.
  • Utilizar ** filas de tarefas assíncronas** que distribuem a carga.

Exemplo usando 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 parado com código de saída ${code}`));
    });
  });
}

// No ficheiro principal
runHeavyComputation(inputData).then(result => {
  console.log('Resultado:', result);
});

Desta forma, o ciclo de eventos principal permanece livre para processar outras tarefas.