Управление потоками worker_threads в Node js

У меня есть функция saveCacheForFirstAndSecond, которая делает довольно много вычислений, и принимает на вход два параметра first и second:

saveCacheForFirstAndSecond(first, second) {
  console.log(`Here we calculate cache for ${first} and ${second}`);
}

Если запускать в одном потоке, то весь кэш обновляется за 15-30 секунд (зависит от кол-ва аргументов):

async updateCache(firsts, seconds) {
  const start = new Date();
  const promises = [];
  for (const first of firsts) {
    for (const second of seconds) {
      promises.push(
        saveCacheForFirstAndSecond(first, second),
      );
    }
  }
  await Promise.allSettled(promises);
  logger.info(`Done update Cache job in ${new Date() - start}ms`);
}

Как создать, например, 10 потоков и распределять между ними вычисления функции saveCacheForFirstandSecond для аргументов first и seconds?

Сейчас я создаю для каждого элемента массива first (их обычно не больше 5) свой поток и передаю туда массив seconds:

const worker = new Worker('./worker_1', { workerData: { first, seconds } });
worker.on("message", result => {
    console.log(`Cache calculate result: ${result}`);
});

Но проблема в том, что для некоторые потоки очень быстро вычисляют нужный результат и стоят без дела, а другие считают по 5 секунд. Надо чтобы работа распределялась между потоками равномерно. saveCacheForFirstandSecond. Как это можно сделать?


Ответы (0 шт):