X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=benchmarks%2Fversus-external-pools%2Ffunctions%2Ffunction-to-bench.js;h=b95f560f0807d7e9b3a638fe2106f609b5f368ca;hb=dab8c377b70fc962ec217f2aeb719842f9f94cd6;hp=0c9738e62282d1486ea57141332761a0fd9705e9;hpb=9f7e7a99ea7dfa6f2fb3c2e0e025b85cfdd4e22e;p=poolifier.git diff --git a/benchmarks/versus-external-pools/functions/function-to-bench.js b/benchmarks/versus-external-pools/functions/function-to-bench.js index 0c9738e6..b95f560f 100644 --- a/benchmarks/versus-external-pools/functions/function-to-bench.js +++ b/benchmarks/versus-external-pools/functions/function-to-bench.js @@ -1,14 +1,51 @@ -module.exports = function (data) { - if ( data.taskType === 'CPU_INTENSIVE' ) { - // CPU Intensive task - for (let i = 0; i <= 5000; i++) { - const o = { - a: i +/** + * The worker function to execute during pools benchmarks. + * NOTE: This function requires to be self-contained, thread-safe and re-entrant. + * @param {*} data The worker data. + * @returns {*} The result. + */ +function functionToBench (data) { + const crypto = require('crypto') + const fs = require('fs') + const TaskTypes = { + CPU_INTENSIVE: 'CPU_INTENSIVE', + IO_INTENSIVE: 'IO_INTENSIVE' + } + data = data || {} + data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE + data.taskSize = data.taskSize || 5000 + const baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt( + 281474976710655 + )}` + switch (data.taskType) { + case TaskTypes.CPU_INTENSIVE: + // CPU intensive task + for (let i = 0; i < data.taskSize; i++) { + const o = { + a: i + } + JSON.stringify(o) + } + return { ok: 1 } + case TaskTypes.IO_INTENSIVE: + // IO intensive task + if (fs.existsSync(baseDirectory) === true) { + fs.rmSync(baseDirectory, { recursive: true }) + } + fs.mkdirSync(baseDirectory, { recursive: true }) + for (let i = 0; i < data.taskSize; i++) { + const filePath = `${baseDirectory}/${i}` + fs.writeFileSync(filePath, i.toString(), { + encoding: 'utf8', + flag: 'a' + }) + fs.readFileSync(filePath, 'utf8') } - JSON.stringify(o) - } - return { ok: 1 } - } else { - throw new Error('Please specify the task type') + fs.rmSync(baseDirectory, { recursive: true }) + return { ok: 1 } + default: + throw new Error(`Unknown task type: ${data.taskType}`) } } + +module.exports = functionToBench