ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Node.js 교과서 - worker_threads
    Node.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

    댓글

Designed by Tistory.