|
1 | 1 | 'use strict';
|
2 | 2 |
|
| 3 | +const { execSync } = require('node:child_process'); |
3 | 4 | const { performance } = require('node:perf_hooks');
|
4 | 5 |
|
5 |
| -const OPS = 100_000; |
6 |
| - |
7 |
| -const options = { nodeSize: 2048, poolSize: 2 }; |
8 |
| - |
9 |
| -const implementations = { |
10 |
| - queue: require('../JavaScript/1-queue.js'), |
11 |
| - naïve: require('../JavaScript/2-naïve.js'), |
12 |
| - fixed: require('../JavaScript/3-fixed.js'), |
13 |
| - unrolled: require('../JavaScript/4-unrolled.js'), |
14 |
| - spare: require('../JavaScript/5-spare.js'), |
15 |
| - pool: require('../JavaScript/6-pool.js'), |
16 |
| - circular: require('../JavaScript/8-circular.js'), |
17 |
| - nodiv: require('../JavaScript/9-no-div.js'), |
18 |
| -}; |
19 |
| - |
20 |
| -const test = (queue) => { |
21 |
| - const startMem = process.memoryUsage().heapUsed; |
22 |
| - const t0 = performance.now(); |
23 |
| - |
24 |
| - let preventOpt = 0; |
25 |
| - for (let i = 0; i < OPS; i++) { |
26 |
| - queue.enqueue({ id: i }); |
27 |
| - } |
28 |
| - for (let i = 0; i < OPS; i++) { |
29 |
| - const { id } = queue.dequeue(); |
30 |
| - preventOpt += id; |
31 |
| - } |
32 |
| - |
33 |
| - const t1 = performance.now(); |
34 |
| - if (preventOpt === 0) console.log('Never print'); |
35 |
| - const endMem = process.memoryUsage().heapUsed; |
36 |
| - |
37 |
| - return { |
38 |
| - cpu: (t1 - t0).toFixed(2), |
39 |
| - memory: ((endMem - startMem) / 1024).toFixed(2), |
40 |
| - }; |
41 |
| -}; |
| 6 | +const implementations = [ |
| 7 | +//['1-queue.js', 2048, 1], |
| 8 | + ['2-naïve.js', 2048, 1], |
| 9 | + ['3-fixed.js', 2048, 1], |
| 10 | + ['4-unrolled.js', 2048, 1], |
| 11 | + ['5-spare.js', 2048, 1], |
| 12 | + ['6-pool.js', 1024, 2], |
| 13 | +//['7-current.js', 1024, 2], |
| 14 | + ['8-circular.js', 2048, 1], |
| 15 | + ['9-nodiv.js', 2048, 1], |
| 16 | +]; |
| 17 | + |
| 18 | +const rounds = 100; |
| 19 | +const ops = 500_000; |
42 | 20 |
|
43 | 21 | const main = () => {
|
44 |
| - const results = {}; |
45 |
| - const entries = Object.entries(implementations); |
46 |
| - for (const { 0: name, 1: Queue } of entries) { |
47 |
| - global.gc(); |
48 |
| - const queue = new Queue(options); |
49 |
| - const result = test(queue); |
50 |
| - results[name] = result; |
| 22 | + const results = []; |
| 23 | + for (const [file, nodeSize, poolSize] of implementations) { |
| 24 | + const options = `${file} ${rounds} ${ops} ${nodeSize} ${poolSize}`; |
| 25 | + console.log(`Test: ${options}`); |
| 26 | + const cmd = `node --expose-gc Performance/test.js ${options}`; |
| 27 | + const out = execSync(cmd, { encoding: 'utf8' }); |
| 28 | + results.push(out.replaceAll('\n', ',')); |
51 | 29 | }
|
52 |
| - console.table(results); |
| 30 | + const data = results.join('').slice(0, -1); |
| 31 | + console.table(JSON.parse(`[${data}]`)); |
53 | 32 | };
|
54 | 33 |
|
55 | 34 | main();
|
0 commit comments