Управление потоками 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. Как это можно сделать?