fix: fix formatting issue.
[poolifier.git] / benchmarks / versus-external-pools / functions / function-to-bench.js
1 'use strict'
2 /**
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).
5 * @param {*} data The worker data.
6 * @returns {*} The result.
7 */
8 const functionToBench = data => {
9 const crypto = require('crypto')
10 const fs = require('fs')
11 const TaskTypes = {
12 CPU_INTENSIVE: 'CPU_INTENSIVE',
13 IO_INTENSIVE: 'IO_INTENSIVE'
14 }
15 data = data || {}
16 data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE
17 data.taskSize = data.taskSize || 5000
18 const baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt(
19 281474976710655
20 )}`
21 switch (data.taskType) {
22 case TaskTypes.CPU_INTENSIVE:
23 // CPU intensive task
24 for (let i = 0; i < data.taskSize; i++) {
25 const o = {
26 a: i
27 }
28 JSON.stringify(o)
29 }
30 return { ok: 1 }
31 case TaskTypes.IO_INTENSIVE:
32 // IO intensive task
33 if (fs.existsSync(baseDirectory) === true) {
34 fs.rmSync(baseDirectory, { recursive: true })
35 }
36 fs.mkdirSync(baseDirectory, { recursive: true })
37 for (let i = 0; i < data.taskSize; i++) {
38 const filePath = `${baseDirectory}/${i}`
39 fs.writeFileSync(filePath, i.toString(), {
40 encoding: 'utf8',
41 flag: 'a'
42 })
43 fs.readFileSync(filePath, 'utf8')
44 }
45 fs.rmSync(baseDirectory, { recursive: true })
46 return { ok: 1 }
47 default:
48 throw new Error(`Unknown task type: ${data.taskType}`)
49 }
50 }
51
52 module.exports = functionToBench