Sobes.tech
Middle — Middle+

Hoe optimaliseer je de uitvoering van een resource-intensieve wiskundige operatie in een single-threaded asynchrone omgeving zodat deze de hoofdgebeurtenislus niet blokkeert?

sobes.tech AI

Antwoord van AI

In een enkelvoudig asynchroon omgeving, zoals Node.js, blokkeren resource-intensieve berekeningen de hoofdgebeurtenislus, wat leidt tot vertragingen bij het verwerken van andere verzoeken. Om dit te voorkomen:

  • Verplaats de berekeningen naar een aparte thread of proces, met behulp van Worker Threads of child_process.
  • Gebruik asynchrone taakwachtrijen die de belasting verdelen.

Voorbeeld met 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 gestopt met exit code ${code}`));
    });
  });
}

// In het hoofdbestand
runHeavyComputation(inputData).then(result => {
  console.log('Resultaat:', result);
});

Op deze manier blijft de hoofdgebeurtenislus vrij om andere taken te verwerken.