[node] worker threads

YOUNGJOO-YOON·2021년 11월 21일
0

JavaScript

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

if (isMainThread) {
  const worker = new Worker(__filename); // 현재 파일을 worker thread에서 실행시킴
  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();
  });
}

// owrner.js
const {
  Worker,
  isMainThread,
  parentPort,
  workerData,
} = require("worker_threads");

const threads = new Set();
threads.add(
  new Worker(__dirname + "/employee1.js", {
    workerData: { number: 999 },
  })
);
threads.add(
  new Worker(__dirname + "/employee2.js", {
    workerData: { number: 666 },
  })
);

for (let worker of threads) {
  worker.on("message", (message) => console.log("from worker", message));
  worker.on("exit", () => {
    threads.delete(worker);
    if (threads.size === 0) {
      console.log("job done! threads.size === ", threads.size);
    }
  });
}
//employee 1
const { workerData, parentPort } = require("worker_threads");

const data = workerData;
console.log("data from 1: ", data); 
parentPort.postMessage(data.number / 3);
// employee 2
const { workerData, parentPort } = require("worker_threads");

const data = workerData;
parentPort.postMessage(data.number / 999);
profile
이 블로그의 글은 제 생각을 정리한 글과 인터넷 어딘가에서 배운 것을 정리한 글입니다. 출처는 되도록 남기도록 하겠습니다. 수정 및 건의 오류 등이 있으면 언제든지 댓글 부탁드립니다.

0개의 댓글