Commit | Line | Data |
---|---|---|
75b44e22 | 1 | const FixedThreadPool = require('../lib/fixed') |
2 | const DynamicThreadPool = require('../lib/dynamic') | |
3 | const Pool = require('worker-threads-pool') | |
4 | const tasks = 1000 | |
106744f7 | 5 | const size = 16 |
75b44e22 | 6 | |
7 | // pools | |
8 | const externalPool = new Pool({ max: size }) | |
cf9aa6c3 | 9 | const fixedPool = new FixedThreadPool(size, './yourWorker.js', { |
10 | maxTasks: 10000 | |
11 | }) | |
12 | const dynamicPool = new DynamicThreadPool( | |
13 | size / 2, | |
14 | size * 3, | |
15 | './yourWorker.js', | |
16 | { maxTasks: 10000 } | |
17 | ) | |
75b44e22 | 18 | |
19 | // data | |
20 | const workerData = { proof: 'ok' } | |
21 | ||
22 | // fixed pool proof | |
23 | async function fixedTest () { | |
24 | let executions = 0 | |
25 | const time = Date.now() | |
8d9ce260 | 26 | for (let i = 0; i <= tasks; i++) { |
27 | fixedPool.execute(workerData).then(res => { | |
28 | executions++ | |
cf9aa6c3 | 29 | if (executions === tasks) { |
30 | console.log( | |
31 | `Fixed pool take ${Date.now() - time} to work on ${executions} tasks` | |
32 | ) | |
33 | } | |
8d9ce260 | 34 | }) |
75b44e22 | 35 | } |
75b44e22 | 36 | } |
37 | ||
38 | async function dynamicTest () { | |
39 | let executions = 0 | |
40 | const time = Date.now() | |
8d9ce260 | 41 | for (let i = 0; i <= tasks; i++) { |
42 | dynamicPool.execute(workerData).then(res => { | |
43 | executions++ | |
cf9aa6c3 | 44 | if (executions === tasks) { |
45 | console.log( | |
777b7824 S |
46 | `Dynamic pool take ${ |
47 | Date.now() - time | |
48 | } to work on ${executions} tasks` | |
cf9aa6c3 | 49 | ) |
50 | } | |
8d9ce260 | 51 | }) |
75b44e22 | 52 | } |
75b44e22 | 53 | } |
54 | ||
55 | async function externalPoolTest () { | |
56 | let executions = 0 | |
57 | const time = Date.now() | |
8d9ce260 | 58 | for (let i = 0; i <= tasks; i++) { |
59 | new Promise((resolve, reject) => { | |
cf9aa6c3 | 60 | externalPool.acquire( |
61 | './externalWorker.js', | |
62 | { workerData: workerData }, | |
63 | (err, worker) => { | |
64 | if (err) { | |
65 | return reject(err) | |
66 | } | |
67 | worker.on('error', reject) | |
68 | worker.on('message', res => { | |
69 | executions++ | |
70 | resolve(res) | |
71 | }) | |
75b44e22 | 72 | } |
cf9aa6c3 | 73 | ) |
8d9ce260 | 74 | }).then(res => { |
cf9aa6c3 | 75 | if (tasks === executions) { |
76 | console.log( | |
777b7824 S |
77 | `External pool take ${ |
78 | Date.now() - time | |
79 | } to work on ${executions} tasks` | |
cf9aa6c3 | 80 | ) |
81 | } | |
75b44e22 | 82 | }) |
83 | } | |
75b44e22 | 84 | } |
85 | ||
86 | async function test () { | |
8d9ce260 | 87 | fixedTest() |
88 | dynamicTest() | |
89 | externalPoolTest() | |
75b44e22 | 90 | } |
91 | ||
92 | test() |