31. worker threads
노드에서 멀티 스레드 방식으로 작업을 할 수 있게 지원해주는 모듈이다.
isMainThread
: 현재 코드가 메인 스레드에서 실행되는지, 워커 스레드에서 실행되는지 구분하는 메서드이다.- 메인 스레드에서는
new Worker
를 통해 현재 파일(__filename
)을 워커 스레드에서 실행시킨다. worker.postMessage
로 부모에서 워커로 데이터를 보낸다.parentPort.on('message')
로 부모로부터 데이터를 받고,postMessage
로 데이터를 보낸다.
노드에서 멀티 스레드를 하는 경우는 극히 드물다.
CPU를 많이 잡아먹는 암호화나 압축할 때 그럴때나 써야되고, 대부분의 경우는 싱글스레드라고 생각하면된다.
노드에서 멀티스레드가 메인이되는 일은 거의 없을 것이다.
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