-import { exit } from 'node:process'
+import { writeFileSync } from 'node:fs'
+import { env } from 'node:process'
+// eslint-disable-next-line n/no-unsupported-features/node-builtins
import { parseArgs } from 'node:util'
-import { run } from 'mitata'
-
import {
availableParallelism,
PoolTypes,
- WorkerTypes
+ WorkerTypes,
} from '../../lib/index.mjs'
import { TaskFunctions } from '../benchmarks-types.cjs'
import {
- buildPoolifierBenchmarkMitata,
- runPoolifierBenchmarkBenchmarkJs
+ convertTatamiNgToBmf,
+ runPoolifierBenchmarkTatamiNg,
} from '../benchmarks-utils.mjs'
const poolSize = availableParallelism()
const taskExecutions = 1
const workerData = {
function: TaskFunctions.factorial,
- taskSize: 50000
+ taskSize: 1000,
}
+const benchmarkReportFile = 'benchmark-report.json'
+let benchmarkReport
-let fixedThreadPool
-let dynamicThreadPool
-let fixedClusterPool
-let dynamicClusterPool
switch (
parseArgs({
args: process.argv,
options: {
type: {
type: 'string',
- short: 't'
- }
+ short: 't',
+ },
},
strict: true,
- allowPositionals: true
+ allowPositionals: true,
}).values.type
) {
- case 'mitata':
- fixedThreadPool = buildPoolifierBenchmarkMitata(
- 'FixedThreadPool',
- WorkerTypes.thread,
- PoolTypes.fixed,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- dynamicThreadPool = buildPoolifierBenchmarkMitata(
- 'DynamicThreadPool',
- WorkerTypes.thread,
- PoolTypes.dynamic,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- fixedClusterPool = buildPoolifierBenchmarkMitata(
- 'FixedClusterPool',
- WorkerTypes.cluster,
- PoolTypes.fixed,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- dynamicClusterPool = buildPoolifierBenchmarkMitata(
- 'DynamicClusterPool',
- WorkerTypes.cluster,
- PoolTypes.dynamic,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- await run()
- await fixedThreadPool.destroy()
- await dynamicThreadPool.destroy()
- await fixedClusterPool.destroy()
- await dynamicClusterPool.destroy()
- break
- case 'benchmark.js':
+ case 'tatami-ng':
default:
- await runPoolifierBenchmarkBenchmarkJs(
- 'FixedThreadPool',
- WorkerTypes.thread,
- PoolTypes.fixed,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- await runPoolifierBenchmarkBenchmarkJs(
- 'DynamicThreadPool',
- WorkerTypes.thread,
- PoolTypes.dynamic,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- await runPoolifierBenchmarkBenchmarkJs(
- 'FixedClusterPool',
- WorkerTypes.cluster,
- PoolTypes.fixed,
- poolSize,
- {
- taskExecutions,
- workerData
- }
- )
- await runPoolifierBenchmarkBenchmarkJs(
- 'DynamicClusterPool',
- WorkerTypes.cluster,
- PoolTypes.dynamic,
- poolSize,
- {
- taskExecutions,
- workerData
- }
+ benchmarkReport = convertTatamiNgToBmf(
+ await runPoolifierBenchmarkTatamiNg(
+ 'FixedThreadPool',
+ WorkerTypes.thread,
+ PoolTypes.fixed,
+ poolSize,
+ {
+ taskExecutions,
+ workerData,
+ }
+ )
)
+ benchmarkReport = {
+ ...benchmarkReport,
+ ...convertTatamiNgToBmf(
+ await runPoolifierBenchmarkTatamiNg(
+ 'DynamicThreadPool',
+ WorkerTypes.thread,
+ PoolTypes.dynamic,
+ poolSize,
+ {
+ taskExecutions,
+ workerData,
+ }
+ )
+ ),
+ }
+ benchmarkReport = {
+ ...benchmarkReport,
+ ...convertTatamiNgToBmf(
+ await runPoolifierBenchmarkTatamiNg(
+ 'FixedClusterPool',
+ WorkerTypes.cluster,
+ PoolTypes.fixed,
+ poolSize,
+ {
+ taskExecutions,
+ workerData,
+ }
+ )
+ ),
+ }
+ benchmarkReport = {
+ ...benchmarkReport,
+ ...convertTatamiNgToBmf(
+ await runPoolifierBenchmarkTatamiNg(
+ 'DynamicClusterPool',
+ WorkerTypes.cluster,
+ PoolTypes.dynamic,
+ poolSize,
+ {
+ taskExecutions,
+ workerData,
+ }
+ )
+ ),
+ }
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
+ env.CI != null &&
+ writeFileSync(benchmarkReportFile, JSON.stringify(benchmarkReport))
break
}
-
-exit()