제가 설정해 놓은 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/

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)