. Node.js phase 간단 정리
본문 바로가기
프로그래밍 공부/CS 공부

Node.js phase 간단 정리

by 불냥이_ 2021. 5. 2.

Node.js 특징

 - Single-Thread의 non-blocking I/O 이벤트 기반 비동기 방식으로 작동한다.

하지만 Main-thread만 single일 뿐, 실제 작업은 worker threads pool에 있는 스레드들이 작업한다.

흔히 말하는 event loop가 main thread의 별칭이다 (반대로 libuv는 worker threads pool을 의미한다.). 이 event loop는 non blocking 방식으로 일을 처리하기 때문에 빠른 IO 성능을 가진다.

 즉 , Event loop이란, Node.js의 메인 스레드로서, 싱글 스레드로 구성되지만 블로킹 될만한 것을 논블로킹 되게 만들어(worker thread로 작업을 넘겨줘서) node.js가 자원대비 효울적으로 충분히 빠르게 동작하도록 한다.

(참고 : 이벤트 루프(Event Loop)란? (tistory.com))

 

이벤트 루프는 다음과 같이 구성된다.

timers : setTimeout(), setInterval() 등으로 스케줄 된 callback 수행.

pending callbacks : 다음 loop로 미뤄진 IO callback 수행

idle, prepare : 내부적으로 사용 (poll이나 timers 등에 작업이 없을 경우?)

poll : 새로운 IO 이벤트를 가져와서 IO와 관련된 callback을 수행

check : setImmediate()에 의해 스케줄된 callback 수행. 그래서, setImmediate()로 callback을 지정했다면, poll이 끝나자마자 바로 수행할 수 있다. 그렇지 않은 경우네는 pending callback으로 넘어간다.

close callbacks : socket.on('close', ...) 와 같이 close와 관련된 callback이 수행된다.

 

 만약 어떤 함수에서 일반적인 callback을 실행했다면, 그 callback 함수는 pending callbacks로 가서 다음 event loop의 pending callbacks phase에서 처리될 것이다. 

그런데 그것보다 더 빨리 처리되기 원한다면 (setTimeout이나 setInvterval로 지정된 함수보다 더빨리 원한다면), setImmediate()로 처리할 수 있을 것이다.

 

 여기서 더 욕심을 부려서 setImmediate()보다 빨리 실행되기 원한다면 process.nextTick()으로 현재 poll phase queue에 넣어서 현재 phase에서 바로 실행할 수 있다.

 

 멋지다.. 

 

 

 

 

 

참고

seoyeonkk.tistory.com/

nodejs의 내부 동작 원리 (libuv, 이벤트루프, 워커쓰레드, 비동기) (tistory.com)

 

nodejs의 내부 동작 원리 (libuv, 이벤트루프, 워커쓰레드, 비동기)

참조문서 https://github.com/nodejs/node https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/ https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node..

sjh836.tistory.com

 

기로록 호로록

행복하세요!

seoyeonkk.tistory.com

setImmediate(), setTimeout() 그리고 process.nextTick() (tistory.com)

 

setImmediate(), setTimeout() 그리고 process.nextTick()

이벤트 루프(Event Loop)에서 많이 나왔던 함수인 setImmediate( )와 setTimeout( ) 그리고 process.nextTick( )에 대해 더 알아보고자 한다. setImmediate( )와 setTimeout( ) setImmediate( )와 setTimeout( )은..

kay0426.tistory.com

 

'프로그래밍 공부 > CS 공부' 카테고리의 다른 글

디자인 패턴 (작업중...)  (0) 2021.04.28
객체 지향 프로그래밍이란  (0) 2021.04.27
HTTPS (대칭키와 비대칭키)  (0) 2021.04.22

댓글