From: Jérôme Benoit Date: Sun, 17 Sep 2023 12:13:30 +0000 (+0200) Subject: Merge branch 'master' into feature/task-functions X-Git-Tag: v2.7.0~1^2~24 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;h=2c93d3cf3183abd425f1578b66fc3b38fae85349;hp=297d705dc3cac3e998e4ce25f1e7ee76c3b94be6;p=poolifier.git Merge branch 'master' into feature/task-functions --- diff --git a/benchmarks/benchmarks-utils.mjs b/benchmarks/benchmarks-utils.mjs index 2d553580..1d5ad240 100644 --- a/benchmarks/benchmarks-utils.mjs +++ b/benchmarks/benchmarks-utils.mjs @@ -7,6 +7,7 @@ import { DynamicThreadPool, FixedClusterPool, FixedThreadPool, + Measurements, PoolTypes, WorkerChoiceStrategies, WorkerTypes @@ -93,24 +94,59 @@ export const runPoolifierPoolBenchmark = async ( WorkerChoiceStrategies )) { for (const enableTasksQueue of [false, true]) { - suite.add( - `${name}|${workerChoiceStrategy}|${ - enableTasksQueue ? 'with' : 'without' - } tasks queue`, - async () => { - pool.setWorkerChoiceStrategy(workerChoiceStrategy) - pool.enableTasksQueue(enableTasksQueue) - assert.strictEqual( - pool.opts.workerChoiceStrategy, - workerChoiceStrategy + if (workerChoiceStrategy === WorkerChoiceStrategies.FAIR_SHARE) { + for (const measurement of [ + Measurements.runTime, + Measurements.elu + ]) { + suite.add( + `${name}|${workerChoiceStrategy}|${measurement}|${ + enableTasksQueue ? 'with' : 'without' + } tasks queue`, + async () => { + pool.setWorkerChoiceStrategy(workerChoiceStrategy, { + measurement + }) + pool.enableTasksQueue(enableTasksQueue) + assert.strictEqual( + pool.opts.workerChoiceStrategy, + workerChoiceStrategy + ) + assert.strictEqual( + pool.opts.enableTasksQueue, + enableTasksQueue + ) + assert.strictEqual( + pool.opts.workerChoiceStrategyOptions.measurement, + measurement + ) + await runPoolifierPool(pool, { + taskExecutions, + workerData + }) + } ) - assert.strictEqual(pool.opts.enableTasksQueue, enableTasksQueue) - await runPoolifierPool(pool, { - taskExecutions, - workerData - }) } - ) + } else { + suite.add( + `${name}|${workerChoiceStrategy}|${ + enableTasksQueue ? 'with' : 'without' + } tasks queue`, + async () => { + pool.setWorkerChoiceStrategy(workerChoiceStrategy) + pool.enableTasksQueue(enableTasksQueue) + assert.strictEqual( + pool.opts.workerChoiceStrategy, + workerChoiceStrategy + ) + assert.strictEqual(pool.opts.enableTasksQueue, enableTasksQueue) + await runPoolifierPool(pool, { + taskExecutions, + workerData + }) + } + ) + } } } suite diff --git a/benchmarks/worker-selection/least.mjs b/benchmarks/worker-selection/least.mjs index b8766322..2abbae82 100644 --- a/benchmarks/worker-selection/least.mjs +++ b/benchmarks/worker-selection/least.mjs @@ -16,8 +16,8 @@ function generateRandomTasksMap ( const tasksMap = generateRandomTasksMap(60, 20) function loopSelect (tasksMap) { - let minValue = Infinity let minKey + let minValue = Infinity for (const [key, value] of tasksMap) { if (value === 0) { return key diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bbe01e10..8dae656b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -143,22 +143,22 @@ packages: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.13 + '@babel/highlight': 7.22.20 chalk: 2.4.2 dev: true - /@babel/helper-validator-identifier@7.22.19: - resolution: {integrity: sha512-Tinq7ybnEPFFXhlYOYFiSjespWQk0dq2dRNAiMdRTOYQzEGqnnNyrTxPYHP5r6wGjlF1rFgABdDV0g8EwD6Qbg==} + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} requiresBuild: true dev: true - /@babel/highlight@7.22.13: - resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} + /@babel/highlight@7.22.20: + resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} engines: {node: '>=6.9.0'} requiresBuild: true dependencies: - '@babel/helper-validator-identifier': 7.22.19 + '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 dev: true @@ -3036,7 +3036,7 @@ packages: resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} engines: {node: '>=12.0.0'} dependencies: - flatted: 3.2.8 + flatted: 3.2.9 keyv: 4.5.3 rimraf: 3.0.2 dev: true @@ -3046,8 +3046,8 @@ packages: hasBin: true dev: true - /flatted@3.2.8: - resolution: {integrity: sha512-6qu0W+A94UKNJRs3ffE8s/fWSHQbjqdNx8elGAe95IqnJA77P68TFz4+2cwC28ouAibiZdGBeV6DsvvMg+4vhQ==} + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true /for-each@0.3.3: diff --git a/src/pools/pool.ts b/src/pools/pool.ts index 3b8234d9..212253ff 100644 --- a/src/pools/pool.ts +++ b/src/pools/pool.ts @@ -136,18 +136,26 @@ export interface TasksQueueOptions { export interface PoolOptions { /** * A function that will listen for online event on each worker. + * + * @defaultValue `() => {}` */ onlineHandler?: OnlineHandler /** * A function that will listen for message event on each worker. + * + * @defaultValue `() => {}` */ messageHandler?: MessageHandler /** * A function that will listen for error event on each worker. + * + * @defaultValue `() => {}` */ errorHandler?: ErrorHandler /** * A function that will listen for exit event on each worker. + * + * @defaultValue `() => {}` */ exitHandler?: ExitHandler /** diff --git a/tests/pools/abstract/worker-node.test.js b/tests/pools/abstract/worker-node.test.js index c670d5bd..f6305fe7 100644 --- a/tests/pools/abstract/worker-node.test.js +++ b/tests/pools/abstract/worker-node.test.js @@ -80,6 +80,11 @@ describe('Worker node test suite', () => { expect(threadWorkerNode.tasksQueueBackPressureSize).toBe(12) expect(threadWorkerNode.tasksQueue).toBeInstanceOf(Deque) expect(threadWorkerNode.tasksQueue.size).toBe(0) + expect(threadWorkerNode.tasksQueueSize()).toBe( + threadWorkerNode.tasksQueue.size + ) + expect(threadWorkerNode.onBackPressureStarted).toBe(false) + expect(threadWorkerNode.onEmptyQueueCount).toBe(0) expect(threadWorkerNode.taskFunctionsUsage).toBeInstanceOf(Map) expect(clusterWorkerNode).toBeInstanceOf(WorkerNode) @@ -118,6 +123,11 @@ describe('Worker node test suite', () => { expect(clusterWorkerNode.tasksQueueBackPressureSize).toBe(12) expect(clusterWorkerNode.tasksQueue).toBeInstanceOf(Deque) expect(clusterWorkerNode.tasksQueue.size).toBe(0) + expect(clusterWorkerNode.tasksQueueSize()).toBe( + clusterWorkerNode.tasksQueue.size + ) + expect(clusterWorkerNode.onBackPressureStarted).toBe(false) + expect(clusterWorkerNode.onEmptyQueueCount).toBe(0) expect(clusterWorkerNode.taskFunctionsUsage).toBeInstanceOf(Map) })