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 를 통해 멀티스레드 환경을 구성하는것도 가능하다..
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 11월 29일 오전 12:59