Node.js

21.02.18 스레드풀, 워커스레드

슈팅스타제제 2021. 3. 6. 16:37

이벤트루프는 싱글스레드 내에 존재한다. 그렇다면 하나의 작업 수행을 완료하기 전에 다른 작업을
수행하지 못하여 한 번 실행했을 때와 두 번 실행했을 때 걸리는 시간이 두 배 차이가 나야 한다.
하지만 crypto 모듈을 예로 실험했을 때 각각 672ms, 679ms 로 차이가 별로 나지 않는 이유는

바로 스레드풀때문이다.

 

✓ Thread Pool
스레드풀을 사용하는 모듈로는 crypto, zlib, dns. lookup 등이 있다. 스레드풀의 기본 개수는 4개로 다음 예제를 통해 확인할 수 있다.

nodejs 교과서 예제 p.157

스레드풀이 작업을 동시에 처리하므로 8 개 작업 중에서 어느 것이 먼저 처리될지 모른다.

하지만 5~8 의 소요시간이 1~4 의 소요시간보다 약 2 배인 것을 확인할 수 있다.

따라서 처음 네 작업이 동시에 실행되고 종료되면 다음 네 작업이 동시에 실행되는 것이다.

Node threadpool 작업을 반복할 경우 1~4 의 작업 수행 순서는 달라져도 5~8 의 작업 순서보다 뒤로 가지 않는 것을 확인할 수 있다.
SET UV_THREADPOOL_SIZE에 스레드 개수를 설정할 숫자를 대입하면 조절할 수 있다. 숫자를 크게 할 경우 컴퓨터 코어 개수와 같거나 많게 두어야 효과 발생하고 같을 때 최적이다.

 


✓ Worker_Threads
노드에서 멀티 스레드 방식으로 작업하기 위해서는 w orker_threads 모듈을 사용하면 된다.
Main thread에서 new worker 를 통해 worker threads 를 생성하여 작업을 수행한다.

 

nodejs 교과서 예제 p.131