Benchmarks: fix workload function
[poolifier.git] / benchmarks / versus-external-pools / functions / function-to-bench.js
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 }
14 data = data || {}
15 data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE
16 data.taskSize = data.taskSize || 5000
17 const baseDirectory = '/tmp/poolifier-benchmarks'
18 switch (data.taskType) {
19 case TaskTypes.CPU_INTENSIVE:
20 // CPU intensive task
21 for (let i = 0; i < data.taskSize; i++) {
22 const o = {
23 a: i
24 }
25 JSON.stringify(o)
26 }
27 return { ok: 1 }
28 case TaskTypes.IO_INTENSIVE:
29 // IO intensive task
30 if (fs.existsSync(baseDirectory) === false) {
31 fs.mkdirSync(baseDirectory, { recursive: true })
32 }
33 for (let i = 0; i < data.taskSize; i++) {
34 const filePath = `${baseDirectory}/${i}`
35 fs.writeFileSync(filePath, i.toString(), {
36 encoding: 'utf8',
37 flag: 'a'
38 })
39 fs.readFileSync(filePath, 'utf8')
40 }
41 return { ok: 1 }
42 default:
43 throw new Error(`Unknown task type: ${data.taskType}`)
44 }
45 }
46
47 module.exports = functionToBench