const Benchmark = require('benchmark')
+const { dynamicClusterTest } = require('./cluster/dynamic')
+const { fixedClusterTest } = require('./cluster/fixed')
+const { dynamicThreadTest } = require('./thread/dynamic')
+const { fixedThreadTest } = require('./thread/fixed')
+
const suite = new Benchmark.Suite()
-const { FixedThreadPool } = require('../lib/index')
-const { DynamicThreadPool } = require('../lib/index')
-const size = 30
-const tasks = 1
const LIST_FORMATTER = new Intl.ListFormat('en-US', {
style: 'long',
type: 'conjunction'
})
-// pools
-const fixedPool = new FixedThreadPool(size, './threadWorker.js', {
- maxTasks: 10000
-})
-const dynamicPool = new DynamicThreadPool(
- size / 2,
- size * 3,
- './threadWorker.js',
- { maxTasks: 10000 }
-)
-const workerData = { proof: 'ok' }
-
// wait some seconds before start, my pools need to load threads !!!
setTimeout(async () => {
test()
}, 3000)
-// fixed pool proof
-async function fixedTest () {
- return new Promise((resolve, reject) => {
- let executions = 0
- for (let i = 0; i <= tasks; i++) {
- fixedPool
- .execute(workerData)
- .then(res => {
- executions++
- if (executions === tasks) {
- return resolve('FINISH')
- }
- return null
- })
- .catch(err => {
- console.error(err)
- })
- }
- })
-}
-
-async function dynamicTest () {
- return new Promise((resolve, reject) => {
- let executions = 0
- for (let i = 0; i <= tasks; i++) {
- dynamicPool
- .execute(workerData)
- .then(res => {
- executions++
- if (executions === tasks) {
- return resolve('FINISH')
- }
- return null
- })
- .catch(err => console.error(err))
- }
- })
-}
-
async function test () {
// add tests
suite
- .add('PioardiStaticPool', async function () {
- await fixedTest()
+ .add('Pioardi:Static:ThreadPool', async function () {
+ await fixedThreadTest()
+ })
+ .add('Pioardi:Dynamic:ThreadPool', async function () {
+ await dynamicThreadTest()
+ })
+ .add('Pioardi:Static:ClusterPool', async function () {
+ await fixedClusterTest()
})
- .add('PioardiDynamicPool', async function () {
- await dynamicTest()
+ .add('Pioardi:Dynamic:ClusterPool', async function () {
+ await dynamicClusterTest()
})
// add listeners
.on('cycle', function (event) {
// eslint-disable-next-line no-process-exit
process.exit()
})
- // run async
- .run({ async: true })
+ .run()
}