이전 글에서 프로세스와 스레드에 차이에 대해서 글을 작성 한 적이 있었다. 복습 및 면접 준비로 인해서 공부 했던 내용들을 재차 정립하는 느낌으로 작성하고 있다.

NODEJS

  • 공식 홈페이지에서는 NodeJS를 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임이라고 소개한다.
    NODEJS 공식 홈페이지

  • 그렇다면, 이 런타임이라는 의미에 집중을 해야하는데

    • 런타임이란 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 말한다. 즉, NodeJs는 JS 실행기라고 볼 수 있다.
    • 브라우저에서만 실행할 수 있었던 JS를 외부 환경에서도 작동할 수 있게 해주는 실행기라고 볼 수 있다.

NODEJS의 내부 구조

  • libuv라는 라이브러리는 멀티스레딩을 지원한다.
    • 멀티스레딩 작업은 Worker_threads 멀티 스레딩 예제는 node 10버전 이상부터 가능하다.
    • libuv는 비동기 I/O에 중점을 둔 다중 플랫폼 지원 라이브러리라고 소개가 되어있다.

그렇다면 NODEJS는 싱글스레드?

  • 그렇다고 할 수 있고, 아니라고 할 수 있다. Nodejs는 자바스크립트 런타임 이기 때문에 이벤트루프 싱글스레드 기반의 자바스크립트를 메인으로 사용하기 때문에 싱글 스레드라고 할 수 있다. 하지만, nodejs가 무작정 싱글스레드이기만 한다면, nodejs를 사용하는 의미가 없다고 볼 수 있다. 특정 작업을 수행할 때에는 libuv를 사용하여 스레드풀을 사용하고, 멀티스레딩을 지원한다고 볼 수 있다.

REFERENCE

https://savaniabhishek.medium.com/node-js-internal-structure-part-1-ef2b7d24e303
https://yceffort.kr/2021/04/nodejs-multithreading-worker-threads
https://haeunyah.tistory.com/81

https://docs.libuv.org/en/v1.x/ -libuv 공식문서

profile
나 이현종

0개의 댓글