summaryrefslogtreecommitdiff
path: root/tests/specs/node/worker_threads/message_port_unref.mjs
blob: a12be1ec8666fbb1561ddaf7722677dbbca1f709 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import {
  isMainThread,
  MessageChannel,
  parentPort,
  Worker,
  workerData,
} from "node:worker_threads";

const useParentPort = Deno.env.get("PARENT_PORT") === "1";

if (useParentPort) {
  if (isMainThread) {
    const worker = new Worker(import.meta.filename);
    worker.postMessage("main says hi!");
    worker.on("message", (msg) => console.log(msg));
  } else {
    parentPort.on("message", (msg) => {
      console.log(msg);
      parentPort.postMessage("worker says hi!");
      parentPort.unref();
    });
  }
} else {
  if (isMainThread) {
    const { port1, port2 } = new MessageChannel();
    const worker = new Worker(import.meta.filename, {
      workerData: port2,
      transferList: [port2],
    });
    port1.postMessage("main says hi!");
    port1.on("message", (msg) => console.log(msg));
  } else {
    const port = workerData;
    port.on("message", (msg) => {
      console.log(msg);
      port.postMessage("worker says hi!");
      port.unref();
    });
  }
}