본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (4) - 노드 내장 모듈 9 [worker_threads] 1

node js logo image

 

 

 

 

앞선 아티클에서  우리는 노드의 싱글 스레드 사용 구조에 대해서 살펴보았습니다. 잘 기억이 나지 않으면 식당 점원에 비유한 아래 아티클을 다시 한번 살펴보시기 바랍니다. 

 

 

 

1. Node.js 핵심 개념 이해 (4) - Single Thread

기본적으로 노드는 싱글 스레드 시스템입니다. 우리가 코드를 동시에 실행할 수 없다는 이야기를 앞의 아티클에서 했었는데, 이것 역시 이 영향에서 비롯됩니다. 일단은 스레드 설명을 위해서

nozeroslope.tistory.com

 

 

그래서 우리는 기본적으로는 노드의 구조가 싱글 스레드를 기반으로 이루어져 있는 것으로 인식하고 학습해 왔죠. 이번 아티클에서는 worker threads를 이용한 멀티 스레딩 방식에 대해서 살펴보겠습니다.

 

우선, 예제를 살펴보기 전에 알아둬야 하는 중요 개념이 있습니다. 바로 메인 스레드워커 스레드죠. 눈치가 빠른 분들이라면 아셨겠지만, 기존에 동작하던 싱글 스레드를 메인 스레드 또는 부모 스레드로 칭합니다. 우리가 별도로 생성하는 스레드를 워커 스레드로 칭하게 되죠.

 

아래 예제와 실행 사례를 보겠습니다. 

 

const {
    Worker, isMainThread, parentPort,
} = require('worker_threads');

if (isMainThread) { // 부모일 경우
    const worker = new Worker(__filename);  
    worker.on('message', message => console.log('from worker', message));
    worker.on('exit', () => console.log('worker exit'));
    worker.postMessage('ping!');
} else {            // 워커일 경우
    parentPort.on('message', (value) => {
        console.log('from parent', value);
        parentPort.postMessage('pong!');
        parentPort.close();
    });
}

/* 출력
from parent ping!
from worker pong!
worker exit
*/