Commit | Line | Data |
---|---|---|
e4bc7a49 JB |
1 | /** |
2 | * The worker function to execute during pools benchmarks. | |
3 | * NOTE: This function requires to be self-contained, thread-safe and re-entrant. | |
4 | * | |
5 | * @param {*} data The worker data. | |
6 | * @returns {*} The result. | |
7 | */ | |
8 | function functionToBench (data) { | |
9 | const fs = require('fs') | |
10 | const TaskTypes = { | |
11 | CPU_INTENSIVE: 'CPU_INTENSIVE', | |
12 | IO_INTENSIVE: 'IO_INTENSIVE' | |
13 | } | |
6c063733 | 14 | data = data || {} |
7a6a0a96 | 15 | data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE |
6c063733 | 16 | data.taskSize = data.taskSize || 5000 |
e4bc7a49 | 17 | const baseDirectory = '/tmp/poolifier-benchmarks' |
6c063733 | 18 | switch (data.taskType) { |
7a6a0a96 | 19 | case TaskTypes.CPU_INTENSIVE: |
6c063733 | 20 | // CPU intensive task |
e4bc7a49 JB |
21 | for (let i = 0; i < data.taskSize; i++) { |
22 | const o = { | |
23 | a: i | |
24 | } | |
25 | JSON.stringify(o) | |
26 | } | |
6c063733 | 27 | return { ok: 1 } |
7a6a0a96 JB |
28 | case TaskTypes.IO_INTENSIVE: |
29 | // IO intensive task | |
e4bc7a49 JB |
30 | if (fs.existsSync(baseDirectory) === false) { |
31 | fs.mkdirSync(baseDirectory, { recursive: true }) | |
32 | } | |
7a6a0a96 | 33 | for (let i = 0; i < data.taskSize; i++) { |
e4bc7a49 JB |
34 | const filePath = `${baseDirectory}/${i}` |
35 | fs.writeFileSync(filePath, i.toString(), { | |
36 | encoding: 'utf8', | |
37 | flag: 'a' | |
38 | }) | |
39 | fs.readFileSync(filePath, 'utf8') | |
7a6a0a96 JB |
40 | } |
41 | return { ok: 1 } | |
6c063733 JB |
42 | default: |
43 | throw new Error(`Unknown task type: ${data.taskType}`) | |
9f7e7a99 | 44 | } |
45 | } | |
e4bc7a49 JB |
46 | |
47 | module.exports = functionToBench |