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. | |
e4bc7a49 JB |
4 | * @param {*} data The worker data. |
5 | * @returns {*} The result. | |
6 | */ | |
7 | function functionToBench (data) { | |
670734fc | 8 | const crypto = require('crypto') |
e4bc7a49 JB |
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 |
670734fc JB |
17 | const baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt( |
18 | 281474976710655 | |
19 | )}` | |
6c063733 | 20 | switch (data.taskType) { |
7a6a0a96 | 21 | case TaskTypes.CPU_INTENSIVE: |
6c063733 | 22 | // CPU intensive task |
e4bc7a49 JB |
23 | for (let i = 0; i < data.taskSize; i++) { |
24 | const o = { | |
25 | a: i | |
26 | } | |
27 | JSON.stringify(o) | |
28 | } | |
6c063733 | 29 | return { ok: 1 } |
7a6a0a96 JB |
30 | case TaskTypes.IO_INTENSIVE: |
31 | // IO intensive task | |
670734fc JB |
32 | if (fs.existsSync(baseDirectory) === true) { |
33 | fs.rmSync(baseDirectory, { recursive: true }) | |
e4bc7a49 | 34 | } |
670734fc | 35 | fs.mkdirSync(baseDirectory, { recursive: true }) |
7a6a0a96 | 36 | for (let i = 0; i < data.taskSize; i++) { |
e4bc7a49 JB |
37 | const filePath = `${baseDirectory}/${i}` |
38 | fs.writeFileSync(filePath, i.toString(), { | |
39 | encoding: 'utf8', | |
40 | flag: 'a' | |
41 | }) | |
42 | fs.readFileSync(filePath, 'utf8') | |
7a6a0a96 | 43 | } |
670734fc | 44 | fs.rmSync(baseDirectory, { recursive: true }) |
7a6a0a96 | 45 | return { ok: 1 } |
6c063733 JB |
46 | default: |
47 | throw new Error(`Unknown task type: ${data.taskType}`) | |
9f7e7a99 | 48 | } |
49 | } | |
e4bc7a49 JB |
50 | |
51 | module.exports = functionToBench |