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/fixed')
-const Pool = require('worker-threads-pool')
-const size = 80
-const externalPool = new Pool({ max: size })
-const fixedPool = new FixedThreadPool(size,
- './yourWorker.js', { maxTasks: 10000 })
-// const dynamicPool = new DynamicThreadPool(size, size * 2, './yourWorker.js', { maxTasks: 10000 })
-const workerData = { proof: 'ok' }
-let executions = 0
+const LIST_FORMATTER = new Intl.ListFormat('en-US', {
+ style: 'long',
+ type: 'conjunction'
+})
// wait some seconds before start, my pools need to load threads !!!
setTimeout(async () => {
async function test () {
// add tests
- suite.add('PioardiStaticPool', async function () {
- executions++
- await fixedPool.execute(workerData)
- })
- .add('ExternalPool', async function () {
- await new Promise((resolve, reject) => {
- externalPool.acquire('./externalWorker.js', { workerData: workerData }, (err, worker) => {
- if (err) {
- return reject(err)
- }
- worker.on('error', reject)
- worker.on('message', res => {
- resolve(res)
- })
- })
- })
+ suite
+ .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 dynamicPool.execute(workerData)
- }) */
- // add listeners
+ .add('Pioardi:Dynamic:ClusterPool', async function () {
+ await dynamicClusterTest()
+ })
+ // add listeners
.on('cycle', function (event) {
- console.log(String(event.target))
+ console.log(event.target.toString())
})
.on('complete', function () {
- console.log(executions)
- this.filter('fastest').map('name')
- console.log('Fastest is ' + this.filter('fastest').map('name'))
+ console.log(
+ 'Fastest is ' +
+ LIST_FORMATTER.format(this.filter('fastest').map('name'))
+ )
+ // eslint-disable-next-line no-process-exit
+ process.exit()
})
- // run async
+ // run async
.run({ async: true })
}
-
-process.on('SIGKILL', () => {
- fixedPool.destroy()
- externalPool.destroy()
-})