읽을말한 글
동기 / 비동기 ?
자 그럼 NodeJS 가 왜 싱글 쓰레드 / 비동기 IO 방식을 채택했는지 이야기 해보자. 싱글 쓰레드의 경우 문맥교환으로 인한 오버헤드가 발생하지 않으며 근데 알아둬야 할 점은 EventLoop 가 싱글 스레드인거지, 뒤에서 일하는 워커들은 멀티스레딩 방식이다. 비동기 IO 방식은 위에서 설명했듯이 최대한 효율적으로 작업을 진행하려고 하므로, CPU time loss 가 최소화된다. 비동기로 처리해야되는 IO 요청이 있으면, 워커한테 던져놓고 스레드는 계속 다른일을 받는다. (이처리과정은 그림으로 설명할예정)
EventLoop 는 자바스크립트 엔진 내부에 있다. 대표적인 잘못된 개념들 중 하나는 바로 이벤트 루프가 자바스크립트 엔진의 일부라는 것이다.
Event Loop Phase
Timers!
I/O Callbacks : Close Call back , Callback Scheduling with Timers, setImmediate()를 제외한 거의 모든 콜백들을 집행
idle, prepare : 내부용으로만 사용 (모든 큐가 비어있으면 idle이 되면서 tick frequency가 떨어짐 = 할일도 없으니 이벤트 루프가 천천히 돈다고한다.. 확인안해봄)
poll
fs.readFile(__filename, ()=>{
setTimeout(() => {
console.log("A");
}, 0);
setImmediate(() => {
console.log("B");
}, 0);
});
위 코드를 실행하면 이벤트 루프에서는 아래와 같은 순서로 동작한다.
예제 2.
setTimeout(() => {
console.log("A");
}, 0};
setImmediate(() => {
console.log("B");
}, 0};
위 코드를 실행하면 이벤트 루프에서는 아래와 같은 순서로 동작한다.