제가 설정해 놓은 callback function이 어떤 과정을 거쳐서 event queue에 들어가나요?
조회수 536회
NodeJS의 이벤트 루프에 대해서 공부하고 있습니다. 인터넷에서 찾아보고, nodejs, libuv source code를 읽고있는데도,
setTimeout( function(){ console.log("Hello World!") }, 1000 );
여기서 저 setTimeout 함수가 어떻게 timer queue에 function(){ console.log( "Hellow World" ) }
를 넣는지 모르겠습니다.
도와주세요 !
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
다른 쓰레드에서 타이머를 돌리고 설정된 시간이 만료되면 노드에게 메세징을 하여 알려주는 방식입니다. 쓰레드를 만들어서 완료되면 알려달라고 명령하는 주체는 노드지만 실제 쓰레드를 만들고 관리하는 건 OS 커널 구현에 종속되어 있으니 비동기로 동작해야 할 작업은 위임합니다. 언급하신 libuv 라이브러리를 통해서 하는 것 같네요.
언젠가는 비동기 작업이 완료될 것이고 커널은 완료 시그널을 노드에게 보냅니다. 이때 queue에 들어가고 루프는 poll하고 있다가 call stack이 비었을 때 queue에 쌓인 콜백들을 순차적으로 실행시키는 거죠.
중간중간 메세지를 주고 받는 부분과 쓰레딩 처리는, 그 컨셉이 노드가 설치된 OS마다 다르지 않겠지만 상세 구현은 각 OS별 커널마다 조금씩 다를 겁니다.
https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
- 답변 감사합니다. 알 수 없는 사용자 2018.9.25 18:20
- 저도 답변은 두루뭉실 달았지만 세부 구현이 궁금해지긴 하네요. 뭔가 더 알게되면 답변 달아볼게요. doodoji 2018.9.26 14:51
- 휴,,, 드디어 Event Loop에 관한 글을 작성했습니다. 확인 부탁드립니다 ! https://medium.com/@rpf5573/nodejs-event-loop-part-1-big-picture-7ed38f830f67 알 수 없는 사용자 2018.9.26 15:25
댓글 입력