refactor: cleanup benchmark code
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 9 Sep 2023 21:27:52 +0000 (23:27 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 9 Sep 2023 21:27:52 +0000 (23:27 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
15 files changed:
benchmarks/benchmarks-utils.mjs
benchmarks/internal/bench.mjs
benchmarks/versus-external-pools/dynamic-node-worker-threads-pool.mjs
benchmarks/versus-external-pools/dynamic-piscina.mjs
benchmarks/versus-external-pools/dynamic-poolifier.mjs
benchmarks/versus-external-pools/dynamic-tinypool.mjs
benchmarks/versus-external-pools/dynamic-worker-nodes.js
benchmarks/versus-external-pools/dynamic-workerpool.mjs
benchmarks/versus-external-pools/fixed-nanothreads.mjs
benchmarks/versus-external-pools/fixed-piscina.mjs
benchmarks/versus-external-pools/fixed-poolifier.mjs
benchmarks/versus-external-pools/fixed-tinypool.mjs
benchmarks/versus-external-pools/fixed-worker-nodes.js
benchmarks/versus-external-pools/fixed-workerpool.mjs
benchmarks/versus-external-pools/static-node-worker-threads-pool.mjs

index 259fca5696b0a32c62c040966196ed78f052d9ca..0aeca085d9115959c46ee719f0d1c20740057def 100644 (file)
@@ -10,7 +10,54 @@ import {
 } from '../lib/index.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++) {
@@ -31,6 +78,16 @@ export const runTest = async (pool, { taskExecutions, workerData }) => {
   })
 }
 
+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
@@ -114,42 +171,3 @@ export const executeTaskFunction = data => {
       throw new Error('Unknown task 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
-  }
-}
index 2749da428bfcda15d881b0f934d35b54f8a603f2..a14ecd5f12086acf98e64cc2c877c68b0bbbf91f 100644 (file)
@@ -7,7 +7,7 @@ import {
   availableParallelism
 } from '../../lib/index.mjs'
 import { TaskFunctions } from '../benchmarks-types.mjs'
-import { buildPool, runTest } from '../benchmarks-utils.mjs'
+import { buildPoolifierPool, runPoolifierTest } from '../benchmarks-utils.mjs'
 
 const poolSize = availableParallelism()
 const pools = []
@@ -22,7 +22,7 @@ for (const poolType of Object.values(PoolTypes)) {
           for (const measurement of [Measurements.runTime, Measurements.elu]) {
             pools.push([
               `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}|measurement:${measurement}`,
-              buildPool(workerType, poolType, poolSize, {
+              buildPoolifierPool(workerType, poolType, poolSize, {
                 workerChoiceStrategy,
                 workerChoiceStrategyOptions: {
                   measurement
@@ -34,7 +34,7 @@ for (const poolType of Object.values(PoolTypes)) {
         } else {
           pools.push([
             `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}`,
-            buildPool(workerType, poolType, poolSize, {
+            buildPoolifierPool(workerType, poolType, poolSize, {
               workerChoiceStrategy,
               enableTasksQueue
             })
@@ -53,7 +53,7 @@ const workerData = {
 const addPools = pools =>
   pools.map(([name, pool]) => {
     return add(name, async () => {
-      await runTest(pool, {
+      await runPoolifierTest(pool, {
         taskExecutions,
         workerData
       })
index fcb1d84c29ee43bcb5c615418d98cfe3819b84ad..ed8285026c740b93cec25465f6c2835e9a53931f 100644 (file)
@@ -1,9 +1,7 @@
-// IMPORT LIBRARIES
 import { DynamicPool } from 'node-worker-threads-pool'
-// FINISH IMPORT LIBRARIES
-// IMPORT FUNCTION TO BENCH
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
 import functionToBench from './functions/function-to-bench.js'
-// FINISH IMPORT FUNCTION TO BENCH
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -30,4 +28,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index ddda47e75138f6157b973af4049d382f497a397f..3f56a69907bc31dadc0db60bec85d43aa1ca2878 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import Piscina from 'piscina'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -26,4 +26,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index ce605eccb51fe54c6d767d683c432e5226519c39..4f6a8b407c43584df4a4272643e1193db3b423e9 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import { DynamicThreadPool } from 'poolifier'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -28,4 +28,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index c1de377230add86db85da551bfb98d2558957bcd..77b5d1114a613522174713751586b1e347e9af8b 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import Tinypool from 'tinypool'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -26,4 +26,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index 7a77d88278877f1acdcc037b8cd55717c76759ee..c85a5f592d54d43a5759d8d0126f28b1994d7884 100644 (file)
@@ -1,7 +1,6 @@
 'use strict'
-// IMPORT LIBRARIES
 const WorkerNodes = require('worker-nodes')
-// FINISH IMPORT LIBRARIES
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
index 2fb02d4b5e7c2b37b3beb592f8a5adf550bd42e9..0e09f1bb6bc286e3ce7013d21c373bda0f92578f 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import workerpool from 'workerpool'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const dataArray = [
@@ -28,4 +28,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index 4f589e2c9c184e920e03b7061b388c5640439304..d5572059d6dff3ec23ad3394df3691c48707c723 100644 (file)
@@ -1,9 +1,7 @@
-// IMPORT LIBRARIES
 import { ThreadPool } from 'nanothreads'
-// FINISH IMPORT LIBRARIES
-// IMPORT FUNCTION TO BENCH
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
 import functionToBench from './functions/function-to-bench.js'
-// FINISH IMPORT FUNCTION TO BENCH
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -27,4 +25,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index 5fe01b62aa4816e7a5a1e14bc6348d1facd5acfd..97150f5e07132b4f99388ad56d7ee87f8af0acf6 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import Piscina from 'piscina'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -26,4 +26,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index 9a84e1e64a09293c0055d25b131fd30e7d323741..cbc7410dc4a6419e344c57896b91a444bbd44ac3 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import { FixedThreadPool } from 'poolifier'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -27,4 +27,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index 07b3abe84a2cd258c26e2d4b3bc9f85bfd4f96ee..7063b5b957891f79496a83f65a7b83510cc314d2 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import Tinypool from 'tinypool'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -26,4 +26,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index d5b01353d2eb0a9c54272e9619080bec92d7bebb..7dfa79bdeb4fe00c3ea50c54f5eec34b1a70c481 100644 (file)
@@ -1,7 +1,6 @@
 'use strict'
-// IMPORT LIBRARIES
 const WorkerNodes = require('worker-nodes')
-// FINISH IMPORT LIBRARIES
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
index 6e11c1454f69e3edf10cadc561c621498334be34..6387b84ee15defde50674d817fafb829a36819f5 100644 (file)
@@ -1,6 +1,6 @@
-// IMPORT LIBRARIES
 import workerpool from 'workerpool'
-// FINISH IMPORT LIBRARIES
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const dataArray = [
@@ -28,4 +28,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)
index 3632216b5daeed0771077f873bbf9bca5e69f177..3275d6f26e3a9a75574c4e0b961375a953fcf1f4 100644 (file)
@@ -1,9 +1,7 @@
-// IMPORT LIBRARIES
 import { StaticPool } from 'node-worker-threads-pool'
-// FINISH IMPORT LIBRARIES
-// IMPORT FUNCTION TO BENCH
+import { executeAsyncFn } from '../benchmarks-utils.mjs'
 import functionToBench from './functions/function-to-bench.js'
-// FINISH IMPORT FUNCTION TO BENCH
+
 const size = parseInt(process.env.POOL_SIZE)
 const iterations = parseInt(process.env.NUM_ITERATIONS)
 const data = {
@@ -27,4 +25,4 @@ async function run () {
   process.exit()
 }
 
-await run()
+await executeAsyncFn(run)