33. worker threads 3

Node.js에서 Worker 스레드는 기본적으로 메인 스레드와 별도로 동작한다.
Worker 스레드의 코드가 모두 실행되고 나면, 그 스레드는 자동으로 종료된다.
따라서 .close() 메서드를 호출하지 않아도, Worker 스레드의 코드가 모두 실행되면 exit 이벤트가 발생하게된다.

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

if (isMainThread) { // 메인 스레드일 때, (부모일 때)
    const threads = new Set(); // 중복되지 않는 배열
    // new Worker의 2번재 인자: 초기 데이터
    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', () => {
            console.log('threads.size', threads.size)
            threads.delete(worker);
            if (threads.size === 0) {
                console.log('worker exit');
            }
        });
        /**
         *
         * */
        // worker.postMessage('ping');
        /**
         *
         * */
    }
} else { // 워커 스레드일 때
    /**
     * 
     * */
    // Worker 생성시 초기데이터를 아래와 같은 방식으로 가져온다.
    // const data = workerData;
    // parentPort.postMessage(data.start + 100);
    /**
     * 
     * */
}

// from worker 101
// from worker 102
// worker exit

주어진 코드에서 워커 스레드의 코드는 주석 처리되어있어서 실제로는 아무것도 실행하지 않는다.
그러나 코드가 없어도 스레드는 시작되었다가 바로 종료되므로 exit 이벤트가 발생하게된다.
그 결과 메인 스레드에서 exit 이벤트에 등록한 콜백 함수가 실행되게 된다.