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