X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=benchmarks%2Fbenchmarks-utils.mjs;h=762966cf2437974977ec2e70012488a4e541c8ee;hb=5972baf82c740050a6da461a8deb8497fcaa8580;hp=8819c59255eb4cb6925e7463760695c2872924e8;hpb=d5fdc57b2cec32c794ded94c86b93fcfb2308d21;p=poolifier.git diff --git a/benchmarks/benchmarks-utils.mjs b/benchmarks/benchmarks-utils.mjs index 8819c592..762966cf 100644 --- a/benchmarks/benchmarks-utils.mjs +++ b/benchmarks/benchmarks-utils.mjs @@ -4,11 +4,60 @@ import { DynamicClusterPool, DynamicThreadPool, FixedClusterPool, - FixedThreadPool + FixedThreadPool, + PoolTypes, + WorkerTypes } from '../lib/index.mjs' -import { PoolTypes, WorkerFunctions, WorkerTypes } from './benchmarks-types.mjs' +import { TaskFunctions } from './benchmarks-types.mjs' -export const runTest = async (pool, { taskExecutions, workerData }) => { +export const buildPoolifierPool = ( + workerType, + poolType, + poolSize, + poolOptions +) => { + switch (poolType) { + case PoolTypes.fixed: + switch (workerType) { + case WorkerTypes.thread: + return new FixedThreadPool( + poolSize, + './benchmarks/internal/thread-worker.mjs', + poolOptions + ) + case WorkerTypes.cluster: + return new FixedClusterPool( + poolSize, + './benchmarks/internal/cluster-worker.mjs', + poolOptions + ) + } + break + case PoolTypes.dynamic: + switch (workerType) { + case WorkerTypes.thread: + return new DynamicThreadPool( + Math.floor(poolSize / 2), + poolSize, + './benchmarks/internal/thread-worker.mjs', + poolOptions + ) + case WorkerTypes.cluster: + return new DynamicClusterPool( + Math.floor(poolSize / 2), + poolSize, + './benchmarks/internal/cluster-worker.mjs', + poolOptions + ) + } + break + } +} + +export const runPoolifierTest = async ( + pool, + { taskExecutions, workerData } +) => { return new Promise((resolve, reject) => { let executions = 0 for (let i = 1; i <= taskExecutions; i++) { @@ -29,6 +78,33 @@ export const runTest = async (pool, { taskExecutions, workerData }) => { }) } +export const getPoolImplementationName = pool => { + if (pool instanceof FixedThreadPool) { + return 'FixedThreadPool' + } else if (pool instanceof DynamicThreadPool) { + return 'DynamicThreadPool' + } else if (pool instanceof FixedClusterPool) { + return 'FixedClusterPool' + } else if (pool instanceof DynamicClusterPool) { + return 'DynamicClusterPool' + } +} + +export const LIST_FORMATTER = new Intl.ListFormat('en-US', { + style: 'long', + type: 'conjunction' +}) + +export const executeAsyncFn = async fn => { + try { + await fn() + } catch (e) { + console.error(e) + // eslint-disable-next-line n/no-process-exit + process.exit(1) + } +} + export const generateRandomInteger = ( max = Number.MAX_SAFE_INTEGER, min = 0 @@ -98,56 +174,17 @@ const readWriteFiles = ( return { ok: 1 } } -export const executeWorkerFunction = data => { +export const executeTaskFunction = data => { switch (data.function) { - case WorkerFunctions.jsonIntegerSerialization: + case TaskFunctions.jsonIntegerSerialization: return jsonIntegerSerialization(data.taskSize || 1000) - case WorkerFunctions.fibonacci: + case TaskFunctions.fibonacci: return fibonacci(data.taskSize || 1000) - case WorkerFunctions.factorial: + case TaskFunctions.factorial: return factorial(data.taskSize || 1000) - case WorkerFunctions.readWriteFiles: + case TaskFunctions.readWriteFiles: return readWriteFiles(data.taskSize || 1000) default: - throw new Error('Unknown worker function') - } -} - -export const buildPool = (workerType, poolType, poolSize, poolOptions) => { - switch (poolType) { - case PoolTypes.fixed: - switch (workerType) { - case WorkerTypes.thread: - return new FixedThreadPool( - poolSize, - './benchmarks/internal/thread-worker.mjs', - poolOptions - ) - case WorkerTypes.cluster: - return new FixedClusterPool( - poolSize, - './benchmarks/internal/cluster-worker.mjs', - poolOptions - ) - } - break - case PoolTypes.dynamic: - switch (workerType) { - case WorkerTypes.thread: - return new DynamicThreadPool( - Math.floor(poolSize / 2), - poolSize, - './benchmarks/internal/thread-worker.mjs', - poolOptions - ) - case WorkerTypes.cluster: - return new DynamicClusterPool( - Math.floor(poolSize / 2), - poolSize, - './benchmarks/internal/cluster-worker.mjs', - poolOptions - ) - } - break + throw new Error('Unknown task function') } }