
참고한 인사이트 : https://velog.io/@surim014/worker-threads-multitasking-in-nodejs, https://inpa.tistory.com/entry/NODE-📚-workerthreads-모듈
워커 쓰레드를 이해하기 이전에 짧게 node.js의 기본인 싱글 스레드 살펴보기
https://velog.io/@kim2004on/Node.js-개념-dbkjh1c5 여기에 기존 node.js 개념은 올렸습니다.
그래서 짧게 정리하면 단일 스레드이고, 이벤트 루프에는 한 번에 하나의 프로세스만 발생함. 즉 하나의 프로세스, 하나의 스레드, 하나의이벤트 루프
이벤트 루프 때문에 단일 스레드 이지만, 비동기로써 여러가지 작업을 돌릴 수 있습니다. 실제로 병렬 처리가 되는 것이 아닌 비동기로 이루어지기 때문이죠.
가장 큰 단점인 복잡한 cpu 자원을 많이 사용하는 로직이 있다면 이 로직으로 인해 다른 프로세스가 에러가 뜰 수 있습니다. 즉 cpu 집약적인 작업이 있다면 과부화로 인해 node의 싱글 스레드가 치명적인 단점으로 작용될 것입니다.
Worker Threads 정의
하나의 프로세스, 여러 개의 스레드, 스레드 별 하나의 이벤트 루프, 스레드 별 하나의 js 엔진 인스턴스, 스레드 별 하나의 node.js 인스턴스

워커 스레드가 필요한 이유
서버는 CPU 집약적인 워크로드로 인해 빠르게 과부화 걸릴 수 있다.
예를 들어서, 두 개의 엔드포인트가 있다고 가정. 하나는 단순하게 CPU를 많이 사용하지 않은 비집약적인 작업을 수행하는 반면 다른 하나는 완료하는 데 10초 이상 걸리는 복잡한 CPU 집약적인 작업을 처리한다.
만약에 서버가? CPU 사용량이 많은 요청을 처리하느라 바쁜 상황이라면..! CPU를 많이 사용하지 않은 요청에는 응답이 느려질 수 있다. 이러한 문제는 Node.js의 황금률, 즉 이벤트 루프를 차단하지 않는다는 원칙 위반.
보통 Node.js는 싱글 스레드 아키텍처를 기반으로 하기 때문에 CPU 집약적인 작업에 적합하지 않은 것으로 알려져 있다.
하지만? 그렇다고 해서 CPU 집약적인 작업을 처리를 해야 하거나, 멀티 스레드의 이점을 활용해야만 할 때!
워커 쓰레드를 이해하기 위한 개념은 동시성 VS 병렬성
동시성 : 싱글 코어에서 한 번에 여러 작업을 처리하는 것.
병렬성 : 멀티 코어에서 한번에 여러 작업을 수행하는 것.
싱글 스레드에서 여러 작업을 수행(동시성)하는 것은, 동시에 실행(병렬성)하는 것보다 시간이 더 오래 걸림.
동시성의 활용은
Node.js에서의 구조는 싱글 스레드 기반 + 논블로킹 I/O
CPU를 많이 쓰는 작업은 워커 스레드로 분리해야 함, 그렇지 않으면 메인 스레드가 막혀 전체 앱이 느려질 수 있음
프로세스, 스레드 이해
프로세스
스레드
비유

워커쓰레드 동작 과정
초기화 단계
이 스크립트(worker.js)를 이 데이터랑({ num: 5 }) 같이 실행해줘. 이걸 "초기화 메타데이터"라고 한다
실행 단계
워커 스레드의 구조적 한계
비효율적 사용 예
주의사항