2 * The worker function to execute during pools benchmarks.
3 * NOTE: This function requires to be self-contained, thread-safe and re-entrant.
4 * @param {*} data The worker data.
5 * @returns {*} The result.
7 function functionToBench (data
) {
8 const crypto
= require('crypto')
9 const fs
= require('fs')
11 CPU_INTENSIVE
: 'CPU_INTENSIVE',
12 IO_INTENSIVE
: 'IO_INTENSIVE'
15 data
.taskType
= data
.taskType
|| TaskTypes
.CPU_INTENSIVE
16 data
.taskSize
= data
.taskSize
|| 5000
17 const baseDirectory
= `/tmp/poolifier-benchmarks/${crypto.randomInt(
20 switch (data
.taskType
) {
21 case TaskTypes
.CPU_INTENSIVE
:
23 for (let i
= 0; i
< data
.taskSize
; i
++) {
30 case TaskTypes
.IO_INTENSIVE
:
32 if (fs
.existsSync(baseDirectory
) === true) {
33 fs
.rmSync(baseDirectory
, { recursive
: true })
35 fs
.mkdirSync(baseDirectory
, { recursive
: true })
36 for (let i
= 0; i
< data
.taskSize
; i
++) {
37 const filePath
= `${baseDirectory}/${i}`
38 fs
.writeFileSync(filePath
, i
.toString(), {
42 fs
.readFileSync(filePath
, 'utf8')
44 fs
.rmSync(baseDirectory
, { recursive
: true })
47 throw new Error(`Unknown task type: ${data.taskType}`)
51 module
.exports
= functionToBench