thread worker 설명

YOUNGJOO-YOON·2021년 11월 21일
0

JavaScript

목록 보기
24/25
const {
  Worker,
  isMainThread,
  parentPort,
  workerData,
} = require("worker_threads");

if (isMainThread) {
  // set 객체를 생성
  const threads = new Set();
  //   set 객체에 worker를 넣어준다.
  threads.add(
    //   worker 생성자의 첫 인자로 file의 위치, 그 다음 workerData로 worker에게 넘겨줄 인자를 넣는다.
    new Worker(__filename, {
      workerData: { start: 1 },
    })
  );
  threads.add(
    new Worker(__filename, {
      workerData: { start: 2 },
    })
  );

  //   iterable 객체인 set 객체에 worker들이 들어있으므로 실행해주고
  //    callback을 통해 worker에게서 응답을 받음
  for (let worker of threads) {
    //   worker를 실행하고 응답을 기다림 (message 변경 불가)
    worker.on("message", (message) => console.log("from worker", message));
    // 쓸모없어진 worker를 죽인다
    worker.on("exit", () => {
      threads.delete(worker);
      if (threads.size === 0) {
        console.log("job done");
      }
    });
  }
} else {
  // workerData를 받는다.
  const data = workerData;
  //   mainThread에게 답을 넘겨준다.
  parentPort.postMessage(data.start + 3);
}
profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글