perf: add dynamic thread pool to continuous benchmark
[poolifier.git] / benchmarks / internal / bench.mjs
index 891ff9eca7118d5bb530e43d23315dcbdfa7c59f..3484951cfb187a42bf1af5f325cd1c436adb6baf 100644 (file)
@@ -1,67 +1,37 @@
-import assert from 'node:assert'
-import Benchmark from 'benchmark'
 import {
   PoolTypes,
-  WorkerChoiceStrategies,
   WorkerTypes,
   availableParallelism
 } from '../../lib/index.mjs'
 import { TaskFunctions } from '../benchmarks-types.mjs'
 import {
-  LIST_FORMATTER,
   buildPoolifierPool,
-  getPoolImplementationName,
-  runPoolifierTest
+  runPoolifierPoolBenchmark
 } from '../benchmarks-utils.mjs'
 
 const poolSize = availableParallelism()
-const fixedThreadPool = buildPoolifierPool(
-  WorkerTypes.thread,
-  PoolTypes.fixed,
-  poolSize
-)
-
 const taskExecutions = 1
 const workerData = {
   function: TaskFunctions.jsonIntegerSerialization,
   taskSize: 1000
 }
 
-const poolifierSuite = new Benchmark.Suite('Poolifier')
-
-for (const pool of [fixedThreadPool]) {
-  for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) {
-    for (const enableTasksQueue of [false, true]) {
-      poolifierSuite.add(
-        `${getPoolImplementationName(pool)}|${workerChoiceStrategy}|${
-          enableTasksQueue ? 'with' : 'without'
-        } tasks queue`,
-        async () => {
-          pool.setWorkerChoiceStrategy(workerChoiceStrategy)
-          pool.enableTasksQueue(enableTasksQueue)
-          assert.strictEqual(
-            pool.opts.workerChoiceStrategy,
-            workerChoiceStrategy
-          )
-          assert.strictEqual(pool.opts.enableTasksQueue, enableTasksQueue)
-          await runPoolifierTest(pool, {
-            taskExecutions,
-            workerData
-          })
-        }
-      )
-    }
+// FixedThreadPool
+await runPoolifierPoolBenchmark(
+  'Poolifier FixedThreadPool',
+  buildPoolifierPool(WorkerTypes.thread, PoolTypes.fixed, poolSize),
+  {
+    taskExecutions,
+    workerData
   }
-}
+)
 
-poolifierSuite
-  .on('cycle', event => {
-    console.info(event.target.toString())
-  })
-  .on('complete', async function () {
-    console.info(
-      'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
-    )
-    await fixedThreadPool.destroy()
-  })
-  .run({ async: true })
+// DynamicThreadPool
+await runPoolifierPoolBenchmark(
+  'Poolifier DynamicThreadPool',
+  buildPoolifierPool(WorkerTypes.thread, PoolTypes.dynamic, poolSize),
+  {
+    taskExecutions,
+    workerData
+  }
+)