-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworker_threads.js
More file actions
45 lines (39 loc) · 1.12 KB
/
worker_threads.js
File metadata and controls
45 lines (39 loc) · 1.12 KB
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
41
42
43
44
45
const { Worker, isMainThread, parentPort } = require("worker_threads");
if (isMainThread) {
const createPool = require("./pool");
const pool = createPool({
init: () => new Worker(__filename)
});
module.exports = (message = "Master") =>
pool(
worker =>
new Promise((resolve, reject) => {
const bind = method => {
worker[method]("message", onMessage);
worker[method]("error", onError);
worker[method]("exit", onExit);
};
const onMessage = message => {
bind("off");
resolve(message);
};
const onError = message => {
bind("off");
reject(message);
};
const onExit = code => {
bind("off");
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
};
bind("on");
worker.postMessage(message);
})
);
} else {
parentPort.on("message", async message => {
const { hash } = require("./utils");
await hash();
parentPort.postMessage(`Hi ${message}`);
});
}