-
Node.js 교과서 - worker_threadsNode.js 2021. 9. 19. 01:47
worker_thread 모듈을 사용하여 Node에서 멀티 스레드 방식으로 작업을 진행한다.
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(); }); }
isMainThread 를 통해 현재 코드가 메인스레드에서 실행되는지 구분해준다.
메인 스레드에서는 new Worker를 통해 현재 파일을 워커스레드에서 실행 시킨다.
메인 스레드에서 worker.postMessagee로 워커에 메시지를 보낼 수 있다.
메인 스레드에서 worker.on('message')로 메시지를 받을 수 있다.
워커는 parentPort.on('message') 이벤트 리스너로 부모로부터 메시지를 받고,
워커는 parentPort.postMessage로 부모에게 메시지를 보낸다.const { Worker , isMainThread, parentPort, } = require('worker_threads'); if(isMainThread){ const threads = new Set(); threads.add(new Worker(__filename, { workerData : { start : 1 }, })); threads.add(new Worker(__filename, { workerData : { start : 2 }, })); for ( let worker of threads ) { worker.on('message',message => console.log('from worker',message)); worker.on('exit', () => { threds.delete(worker); if(threds.size === 0){ console.log('job done'); } }); } }else{ const data = workerData; parrentPort.postMessage(data.start + 100); }
'Node.js' 카테고리의 다른 글
Node.js 교과서 - 이벤트 이해하기 (0) 2021.09.19 Node.js 교과서 - 파일 시스템 (0) 2021.09.19 Node.js 교과서 - 암호화 (0) 2021.09.19 Node.js 교과서 - path , url , querystring (0) 2021.09.19 Node.js 교과서 - process (0) 2021.09.19