-
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathworkerTerminate.mjs
More file actions
42 lines (38 loc) · 1.21 KB
/
workerTerminate.mjs
File metadata and controls
42 lines (38 loc) · 1.21 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
import { isMainThread, Worker } from 'worker_threads';
// a Very costly RegExp
const regEx = /(x+x+)+y+/g;
const sample = 'x'.repeat(50) + '';
if (!isMainThread) {
console.log('Worker: Starting');
const start = performance.now();
console.log('%o', regEx.test(sample));
console.log(`Elapsed Time ${elapsedTimeMsFrom(start)}`);
console.log('Worker: Stopping');
setTimeout(() => process.exit(0), 10);
}
if (isMainThread) {
const worker = new Worker(new URL(import.meta.url));
setTimeout(() => {
console.log('Main: Terminating Worker');
const start = performance.now();
worker.terminate().then((i) => {
console.log('Terminated with ' + i);
console.log(`After ${elapsedTimeMsFrom(start)}ms`);
console.log('Successfully Terminated!');
process.exit(0);
});
setTimeout(() => {
console.log('Hard Exit');
console.log(`After ${elapsedTimeMsFrom(start)}ms`);
process.exit(1);
}, 2000);
}, 500);
}
/**
*
* @param {number} relativeTo
* @returns {number} elapsed time in milliseconds
*/
function elapsedTimeMsFrom(relativeTo) {
return performance.now() - relativeTo;
}