Запускается 10 последовательных обращений к БД ( под последовательностью подразумевается, что в каждый момент времени работает только 1 воркер из пула ).
Затем запускаются ( без ожиданий завершения предыдущего обращения к БД ) ещё столько же запросов, но в этом случае, в poll-очереди Event loop'а должны оказаться уже не 1, а 10 эвентов, соответственно ( в теории ) все воркеры будут загружены.
Однако на практике 2-й вариант работает более, чем на порядок медленнее
let start = process.hrtime();
for(let i = 0; i < userIds.length ; i++)
{
await User.findOne( { _id: userIds[ i ] } );
}
console.log( 'Sequential time through Await: ' + process.hrtime( start ) );
let findUserTasks = [ ];
start = process.hrtime();
for(let i = 0; i < userIds.length ; i++)
{
findUserTasks.push( User.findOne( { _id: userIds[ i ] } ) );
}
await Promise.all( findUserTasks );
console.log( 'Parallel time through Promise.all: ' + process.hrtime( start ) );
Output:
Sequential time through Await: 0,22821906
Parallel time through Promise.all: 3,20166249
P.S.: При нарезке изображений разного размера с помощью модуля Sharp, Promise.all(), как и предполагалось, показывает себя намного быстрее, чем последовательные await'ы