Community

오늘의 오전 학습 - 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 를 통해 멀티스레드 환경을 구성하는것도 가능하다..

알림

알림이 없습니다