자바스크립트의 동시성
동기 모델의 단점
- 다른 언어의 멀티 쓰레드를 이용하는 동기 모델의 경우 각 쓰레드별로 메모리를 점유하게 되고 context switching이 발생하게 되면서 메모리와 cpu에 대한 오버헤드가 발생한다.
콜백
- Just pass a function that will be called when the task is complete.
1 | // file.txt의 읽기가 끝났을 때 읽어온 content를 인자로 미리 예약된 callback을 호출한다. |
단점
- 어떤 일을 순차적으로 동작시키거나, 병렬로 동작시키는게 어렵다.
- for/while try/catch 구조를 포기하게 만든다.
- 에러 핸들링이 어렵다.
- 코드 가독성이 떨어진다.
프로미스
무엇을 해결했나
- 순차적, 병렬적 작업들의 쉬운 연결.
- 에러 핸들링
1 | // Promise style |
1 | fetchJSON('/user-profile') |
이벤트루프
- 이벤트루프는 자바스크립트 런타임이 아닌 호스팅 환경에 종속된다.
- 이벤트루프를 통해 각 호스팅 환경의 방법으로 이벤트를 스케쥴링하게된다.
JS엔진이 호스팅환경에게
“이봐 나는 이제 코드 수행을 중지시킬 거야. 하지만 자네는 네트워크 요청이 모두 끝나면 가져온 데이터를 이용해 이 함수를 호출(call back)해주게.”
출처 : 자바스크립트는 어떻게 작동하는가: 이벤트 루프와 비동기 프로그래밍의 부상, async/await을 이용한 코딩 팁 다섯 가지
이벤트루프의 임무
콜스택과 콜백 큐를 모니터링한다.
콜스택이 비었을 때, 콜백 큐의 첫번째 이벤트 핸들러를 실행시킨다.