Добрый день. Есть
N операций, которых надо выполнить. Операции можно выполнить асинхронно, поэтому завернул всё в
Promise и использую
Promise.all. Но есть ограничение: нельзя выполнять больше чем
countThreads процессов одновременно (N > countThreads).
Сделал так:
let threadsCount = 10;
let outData = [];
for (let block=0; block*threadsCount<N; block++){
let allParamsShort = allParams.slice(block*threadsCount, (block+1)*threadsCount);
if (allParamsShort){
let promises = allParamsShort.map(params=>run(workerFuncName, ...params));
let data = await Promise.allSettled(promises);
outData = outData.concat(data);
};
};
т.е. формирую пачку запросов и выполняю их.
Но один запрос может выполняться 2, а может 50 секунд, и вся пачка простаивает, ожидая последнего.
Подскажите, как можно организовать выполнение, чтобы всегда было запущено
countThreads операций, чтобы повысить производительность?