Sobes.tech
Middle — Middle+

Comment optimiser l'exécution d'une opération mathématique gourmande en ressources dans un environnement asynchrone mono-thread pour qu'elle ne bloque pas la boucle d'événements principale?

sobes.tech IA

Réponse de l'IA

Dans un environnement asynchrone mono-thread, comme Node.js, les calculs gourmands en ressources bloquent la boucle d'événements principale, ce qui entraîne des retards dans le traitement d'autres requêtes. Pour éviter cela :

  • Déplacer les calculs dans un thread ou un processus séparé, en utilisant Worker Threads ou child_process.
  • Utiliser des files d'attente de tâches asynchrones qui répartissent la charge.

Exemple avec 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 arrêté avec le code de sortie ${code}`));
    });
  });
}

// Dans le fichier principal
runHeavyComputation(inputData).then(result => {
  console.log('Résultat :', result);
});

Ainsi, la boucle d'événements principale reste libre pour traiter d'autres tâches.