Promise.all은 Parallel로 실행되는가?

Javascript의 모든 코드는 이벤트 루프에서 처리된다. 그리고 Node.js의 이벤트 루프 구현체로 libuv가 사용 된다는 사실은 널리 알려져 있다. 그런데 이상하지 않은가?

Promise.all은 Parallel로 실행되는가?

이벤트 루프 모델을 이해했다면 자바스크립트에 병렬 실행은 없다는 것을 이해했을 것이다. 파일, 네트워크 I/O는 자바스크립트 코드가 직접 처리하는 것이 아니고, 콜백은 이벤트 루프에 의해 호출되어 순차적으로 실행된다.

그럼, Promise.all은 어떤가?

음… 애초에 자바스크립트 코드가 병렬적으로 실행될 수 있는가?

Promise.all을 잘 몰라서 생긴 일

Promise.all은 Promise의 호출 순서와는 전혀 관계가 없다. Promise의 기본 동작을 하나도 건드리지 않는다.

Promise.all이 제공하는 기능이란, 트랜잭션과 같이 하나라도 실패하면 catch 훅으로 넘어가게 하는 것이다.

1
2
3
4
5
6
7
Promise.all([p1, p2, p3, p4, p5])
.then((values) => {
console.log(values);
})
.catch((error) => {
console.log(error.message);
});

오히려 순차적으로 Promise를 실행하는 것이 더 특별하다.

reduce를 사용해 iterable.reduce((p, fn) => p.then(fn), Promise.resolve())로 순차적으로 실행시킬 수 있다. (웬만하면 then으로 직접 잇겠지만.)

Async Functions in Javascript 1를 참고해도 좋을 것 같다.

출처: How does Promise.all all works interanlly

출처: Is Node.js native Promise.all processing in parallel or sequentially? | StackOverFlow

Promise.all은 Parallel로 실행되는가?

https://jsqna.com/js-promise-all/

Author

Seongbin Kim

Posted on

21-01-15

Updated on

21-01-19

Licensed under

댓글