Merge branch 'master' into elu-strategy
[poolifier.git] / benchmarks / versus-external-pools / functions / function-to-bench.js
CommitLineData
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 */
7function 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
51module.exports = functionToBench