Update threads pool libraries to benchmark to latest. (#334)
[poolifier.git] / benchmarks / internal / choose-worker.js
CommitLineData
aacd8188 1const Benchmark = require('benchmark')
292ad316 2const { LIST_FORMATTER } = require('./benchmark-utils')
aacd8188
S
3
4const suite = new Benchmark.Suite()
5
292ad316
JB
6function generateWorkersArray (numberOfWorkers) {
7 return [...Array(numberOfWorkers).keys()]
8}
aacd8188 9
292ad316 10const workers = generateWorkersArray(60)
aacd8188 11
e843b904 12let nextWorkerIndex
aacd8188 13
ff5e76e1 14function chooseWorkerTernaryOffByOne () {
aacd8188
S
15 nextWorkerIndex =
16 workers.length - 1 === nextWorkerIndex ? 0 : nextWorkerIndex + 1
17 return workers[nextWorkerIndex]
18}
19
472bf1f5
JB
20function chooseWorkerTernaryWithNegation () {
21 nextWorkerIndex =
22 !nextWorkerIndex || workers.length - 1 === nextWorkerIndex
23 ? 0
24 : nextWorkerIndex + 1
25 return workers[nextWorkerIndex]
26}
27
28function chooseWorkerTernaryWithPreChoosing () {
aacd8188
S
29 const chosenWorker = workers[nextWorkerIndex]
30 nextWorkerIndex =
31 workers.length - 1 === nextWorkerIndex ? 0 : nextWorkerIndex + 1
32 return chosenWorker
33}
34
35function chooseWorkerIncrementModulo () {
36 const chosenWorker = workers[nextWorkerIndex]
37 nextWorkerIndex++
38 nextWorkerIndex %= workers.length
39 return chosenWorker
40}
41
42suite
ff5e76e1 43 .add('Ternary off by one', function () {
aacd8188 44 nextWorkerIndex = 0
ff5e76e1 45 chooseWorkerTernaryOffByOne()
aacd8188 46 })
472bf1f5
JB
47 .add('Ternary with negation', function () {
48 nextWorkerIndex = 0
49 chooseWorkerTernaryWithNegation()
50 })
e843b904 51 .add('Ternary with pre-choosing', function () {
aacd8188 52 nextWorkerIndex = 0
472bf1f5 53 chooseWorkerTernaryWithPreChoosing()
aacd8188
S
54 })
55 .add('Increment+Modulo', function () {
56 nextWorkerIndex = 0
57 chooseWorkerIncrementModulo()
58 })
59 .on('cycle', function (event) {
60 console.log(event.target.toString())
61 })
62 .on('complete', function () {
63 console.log(
64 'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
65 )
66 // eslint-disable-next-line no-process-exit
67 process.exit()
68 })
69 .run()