async 함수 호출 질문입니다.

worker thread pool을 만들어서 반복문으로 cpu가 많이 먹는 작업을 돌리고 있습니다.
그런데 한가지 궁금한게 생겼습니다.

for (let i = 0; i < infos.length; i++) {
(async () => {
const result = await pool.exec(infos[i]);
if(result !== false && result !== ‘false’) {
try {
await db.asyncBulk(“query”);
console.log(result.length + " : " + i + " - total: " + infos.length);
} catch(err) {
console.log("db Error: ");
console.log(err);
}
}
})();
///////////////////////////////////////////////
for (let i = 0; i < infos.length; i++) {
const result = await pool.exec(infos[i]);
if(result !== false && result !== ‘false’) {
try {
await db.asyncBulk(“query”);
console.log(result.length + " : " + i + " - total: " + infos.length);
} catch(err) {
console.log("db Error: ");
console.log(err);
}
}
}

아래 코드와 위 코드의 차이점을 모르겠습니다.
동작에서는 위 코드가 훨씬 빠르게 동작하는데요 아래 코드는 굉장히 느립니다.
위코드는 동작부분을 익명 함수로 감싸준거같은데
코드에서 속도 차이가 많이나는지 모르겠습니다.
인터넷에서 찾아보고 했으나 정확한 차이를 찾지 못해서 질문 올려봅니다.
조언 좀 부탁드리겠습니다.
감사합니다.

위에는 for문 안에서 await 하지 않을거고 일단 반복문을 다 돌릴겁니다.
일단 각 반복문에서 비동기에 해당하는 부분은 병렬로 실핼될 것이니
쓰레드 풀이 넉넉하다면 가장 오래 걸리는 쿼리만 기다리면 될 겁니다.

아래는 for문 스코프 안에 await가 있으므로 해당 for문은 각 이터레이션마다 await 하며 각 비동기 대기시간의 합 만큼 기다려야 합니다.

비동기 처리 모델로 따지자면

  • 위에 것은 parallel
  • 아래 것은 series(sequential)

답변감사합니다 이해가 되었습니다.