-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththread_addby.js
More file actions
87 lines (61 loc) · 2.44 KB
/
thread_addby.js
File metadata and controls
87 lines (61 loc) · 2.44 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const { Worker, isMainThread, parentPort } = require("worker_threads");
const { Mutex } = require("async-mutex"); //not required
// Share data between threads
let databaseValue = 0;
if (isMainThread) {
async function runService() {
const promises = [];
const numThreads = 10;
for (let i = 0; i < numThreads; i++) {
promises.push(new Promise((resolve, reject) => {
const worker = new Worker(__filename);
worker.on("message", resolve);
worker.on("error", reject);
worker.on("exit", (code) => {
if (code !== 0)
reject(new Error(`Worker stopped with exit code ${code}`));
});
}));
}
const results = await Promise.all(promises);
databaseValue = results.reduce((acc, val) => acc + val, 0);
console.log('Final value:', databaseValue);
}
runService().catch((err) => console.error(err));
} else {
function increase() {
return 100; // Each worker increases the value by 100
}
const result = increase();
parentPort.postMessage(result); // Send the result back to the main thread
}
// const { Worker, isMainThread, parentPort, workerData } = require("worker_threads");
// const { Mutex } = require("async-mutex");
// // Share data between threads
// let databaseValue = 0;
// if (isMainThread) {
// async function runService() {
// return new Promise((resolve, reject) => {
// const worker = new Worker(__filename, { workerData: { addBy: 100 } });
// worker.on("message", resolve);
// worker.on("error", reject);
// worker.on("exit", (code) => {
// if (code !== 0)
// reject(new Error(`Worker stopped with exit code ${code}`));
// });
// });
// }
// async function run() {
// const result = await runService();
// databaseValue += result; // Update databaseValue based on the result from the worker
// console.log('result>>>>>>>>>', result);
// }
// run().catch((err) => console.error(err));
// console.log("I should run immediately");
// } else {
// function increase(addBy) {
// return addBy; // Return the value to be added
// }
// const result = increase(workerData.addBy);
// parentPort.postMessage(result); // Send the result back to the main thread
// }