오늘의 오전 학습 - Node.js는 싱글스레드인가?

node.js 의 실행환경이 싱글스레드라는것을 의심없이 받아들이고 있었는데, 이를 의심해보는 좋은 포스팅이 있어 요약하고자 했습니다


참고문헌


https://helloinyong.tistory.com/350


요약


동시성과 병렬성


  • 동시성은 하나의 스레드에서 여러 작업을 CPU가 빠르게 전환시키면서 작업을 진행하여 좀 더 효율적으로 작업하는 방식 (React의 useTransition 도 같은 원리)
    허나 결국은 하나의 스레드 내에서의 작업

  • 병렬성은 여러개의 물리적인 스레드에서 작업을 진행


멀티스레드의 특징


  • 같은 프로세스 내 서로 다른 스레드들이 동시에 실행된다 (병렬성)

  • 각 스레드들은 프로세스가 할당받은 자원을 공유한다


멀티스레드의 특징과 비교해보는 node.js 의 worker_thread


  • node.js는 10버전 이후부터 worker_threads 를 지원

  • node.js 환경에서 별도의 스레드를 생성한 다음, 각 스레드 별 비동기 처리가 가능하도록 지원해주는 libuv 엔진이 세팅되며, 이후 각 스레드 내 javascript 환경으로 수행한다.

  • node.js 환경 아래 하나의 이벤트루프를 공유한다.

  • 하지만 각 스레드별 script 를 실행시키고, 이에 대한 message 만 주고받을 뿐, 자원을 공유하지는 않는다
    (어떠한 공유되는 변수를 여러 스레드에서 활용할 수 없다는 의미)


결론


  • node.js는 분명 worker_threads 모듈을 통해 스레드를 추가하여 병렬적으로 작업을 수행할 수 있다. 이는 멀티스레드의 방식과 유사하다

  • 다만, node.js의 기본적인 핵심 요소는 '하나의 이벤트루프 + 메인 스레드' 이며 이러한 핵심 요소가 여러개 생성되는 방식이 아니다.

  • 정리하자면 node.js는 싱글스레드 기반이지만, worker_threads 를 통해 멀티스레드 환경을 구성하는것도 가능하다..


Node.js가 왜 싱글 스레드로 불리는지 "정확한 이유"를 알고 계신가요?

이뇽의세상

Node.js가 왜 싱글 스레드로 불리는지 "정확한 이유"를 알고 계신가요?

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 11월 29일 오전 12:59

댓글 0