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.
8 const functionToBench
= data
=> {
9 const crypto
= require('crypto')
10 const fs
= require('fs')
12 CPU_INTENSIVE
: 'CPU_INTENSIVE',
13 IO_INTENSIVE
: 'IO_INTENSIVE'
16 data
.taskType
= data
.taskType
|| TaskTypes
.CPU_INTENSIVE
17 data
.taskSize
= data
.taskSize
|| 5000
18 const baseDirectory
= `/tmp/poolifier-benchmarks/${crypto.randomInt(
21 switch (data
.taskType
) {
22 case TaskTypes
.CPU_INTENSIVE
:
24 for (let i
= 0; i
< data
.taskSize
; i
++) {
31 case TaskTypes
.IO_INTENSIVE
:
33 if (fs
.existsSync(baseDirectory
) === true) {
34 fs
.rmSync(baseDirectory
, { recursive
: true })
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(), {
43 fs
.readFileSync(filePath
, 'utf8')
45 fs
.rmSync(baseDirectory
, { recursive
: true })
48 throw new Error(`Unknown task type: ${data.taskType}`)
52 module
.exports
= functionToBench