Node.js(1)

하정현·2023년 10월 31일

Node.js

목록 보기
1/12
post-thumbnail

🐣Node.js

node.js란 Chrome V8 JS엔진으로 빌드된 JavaScript 런타임이다.
자바스크립트를 실행할 수 있는 환경으로, 컴퓨터에서 브라우저 없이 실행하게 도와준다.

🐣 Node.js의 3가지 특성

🐥논블로킹(Non-blocking) I/O
🐥싱글 스레드(Single Thread)
🐥이벤트 루프(Event Loop)

논블로킹(Non-blocking) I/O

함수가 실행되는 중에도 다른 작업을 동시에 진행 가능하다.
비동기작업의 효율적인 특성이다.

싱글 스레드(Single Thread)

스레드(Thread): 프로그램이 동작할 때, CPU 또는 프로세서를 사용하는 단위이다.

이벤트 루프(Event Loop)

이벤트 루프를 살펴보기전에 먼저 Node가 어떻게 구성 되어있는지 부터 봐야한다.
Node.js 안에 V8엔진과 더불어 libuv라는 것이 있는데,
libuv는 비동기 요청이 오면 커널에게 요청을 위임한다. 응답이오면 사용자에게 돌려준다
만약 커널이 지원하지 않는다면 자신의 워커 스레드가 담긴 스레드 풀을 사용 한다
기본적으로 4개의 스레드를 가지는 스레드 풀을 생성하고 최대 128까지 예외적으로 늘릴수 있다.

이벤트 루프에는 각 phase가 존재한다. 한페이즈 에서 다음 페이즈로 넘어갈 때를 Tick이라고 한다.

각 페이즈는 큐를 하나씩 가지고 있다.

Timer Phase -> Pending Callbacks Phase -> Idle, Prepare Phase ->
Poll Phase -> Check Phase -> Close Callbacks Phase
순환구조로 진행 된다.

각 페이즈는 큐를 하나씩 가지고 있고, 큐에 있는 작업이 끝나거나 실행한도에 다다르면 다음 페이즈로 넘어간다. 이때 이벤트 루프가 Node.js의 비동기 실행을 도와주는 것과 별개로 싱글 스레드이므로 한번에 하나의 페이즈에만 진입해 한번에 하나의 작업만 수행할 수 있다는 점을 명심해야 한다.

Node.js는 페이즈에 진입해 큐에 쌓인 작업을 처리한다.
쌓인 작업을 처리하던 중 이전 페이즈에서 실행했던 작업의 콜백이나
커널이 스케줄링한 새로운 작업이 큐에 추가될 수 있다.
Node.js가 큐에 계속 추가되는 작업을 처리하느라 다음 페이즈로 넘어가지 못할 수 있다.
단, 페이즈는 시스템의 실행 한도의 영향을 받으므로 Node.js가 한 페이즈에 영원히 갇히는 일은 없다.

자세한 내용은 이벤트루프여길
참조하자 사진도 위에서 가져왔다.

🐤결론

node.js는 싱글스레드 논 블로킹 모델이다. 하나의 스레드로 동작하지만,
I/O 작업이 발생한 경우 이를 비동기적으로 처리할 수 있다. 이 기반에는 이벤트 루프가
있다.

🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤🐥🐤

0개의 댓글