-import { add, complete, cycle, save, suite } from 'benny'
import {
- WorkerChoiceStrategies,
+ PoolTypes,
+ WorkerTypes,
availableParallelism
} from '../../lib/index.mjs'
+import { TaskFunctions } from '../benchmarks-types.js'
import {
- PoolTypes,
- WorkerFunctions
- // WorkerTypes
-} from '../benchmarks-types.mjs'
-import { buildPool, runTest } from '../benchmarks-utils.mjs'
-
-const WorkerTypes = Object.freeze({
- thread: 'thread'
-})
+ buildPoolifierPool,
+ runPoolifierPoolBenchmark
+} from '../benchmarks-utils.js'
const poolSize = availableParallelism()
-const pools = []
-for (const poolType of Object.values(PoolTypes)) {
- for (const workerType of Object.values(WorkerTypes)) {
- for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) {
- for (const tasksQueue of [false, true]) {
- const pool = buildPool(
- workerType,
- poolType,
- poolSize,
- tasksQueue
- ? {
- ...{
- workerChoiceStrategy
- },
- ...{ enableTasksQueue: true }
- }
- : {
- workerChoiceStrategy
- }
- )
- pools.push([
- `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${tasksQueue}`,
- pool
- ])
- }
- }
- }
-}
-
const taskExecutions = 1
const workerData = {
- function: WorkerFunctions.jsonIntegerSerialization,
+ function: TaskFunctions.jsonIntegerSerialization,
taskSize: 1000
}
-const addPools = pools =>
- pools.map(([name, pool]) => {
- return add(name, async () => {
- await runTest(pool, {
- taskExecutions,
- workerData
- })
- })
- })
-const resultsFile = 'poolifier'
-const resultsFolder = 'benchmarks/internal/results'
-suite(
- 'Poolifier',
- ...addPools(pools),
- cycle(),
- complete(),
- save({
- file: resultsFile,
- folder: resultsFolder,
- format: 'json',
- details: true
- }),
- save({
- file: resultsFile,
- folder: resultsFolder,
- format: 'chart.html',
- details: true
- }),
- save({
- file: resultsFile,
- folder: resultsFolder,
- format: 'table.html',
- details: true
- })
+// FixedThreadPool
+await runPoolifierPoolBenchmark(
+ 'Poolifier FixedThreadPool',
+ buildPoolifierPool(WorkerTypes.thread, PoolTypes.fixed, poolSize),
+ {
+ taskExecutions,
+ workerData
+ }
+)
+
+// DynamicThreadPool
+await runPoolifierPoolBenchmark(
+ 'Poolifier DynamicThreadPool',
+ buildPoolifierPool(WorkerTypes.thread, PoolTypes.dynamic, poolSize),
+ {
+ taskExecutions,
+ workerData
+ }
+)
+
+// FixedClusterPool
+await runPoolifierPoolBenchmark(
+ 'Poolifier FixedClusterPool',
+ buildPoolifierPool(WorkerTypes.cluster, PoolTypes.fixed, poolSize),
+ {
+ taskExecutions,
+ workerData
+ }
+)
+
+// DynamicClusterPool
+await runPoolifierPoolBenchmark(
+ 'Poolifier DynamicClusterPool',
+ buildPoolifierPool(WorkerTypes.cluster, PoolTypes.dynamic, poolSize),
+ {
+ taskExecutions,
+ workerData
+ }
)
- .then(() => {
- // eslint-disable-next-line n/no-process-exit
- return process.exit()
- })
- .catch(err => console.error(err))