Removed max tasks (#225)
authorAlessandro Pio Ardizio <alessandroardizio94@gmail.com>
Tue, 23 Feb 2021 08:33:46 +0000 (09:33 +0100)
committerGitHub <noreply@github.com>
Tue, 23 Feb 2021 08:33:46 +0000 (09:33 +0100)
* Removed max tasks

* Coverage on abstract pool default

* Remove default option from the abstract pool since the default is already specified in any child class

* Fix missing default opts

* Few small changes

* Remove default from abstract pool constructor JSDoc

Co-authored-by: Shinigami <chrissi92@hotmail.de>
17 files changed:
CHANGELOG.md
README.md
benchmarks/internal/cluster/dynamic.js
benchmarks/internal/cluster/fixed.js
benchmarks/internal/thread/dynamic.js
benchmarks/internal/thread/fixed.js
benchmarks/versus-external-pools/dynamic-poolifier.js
benchmarks/versus-external-pools/fixed-poolifier.js
src/pools/abstract-pool.ts
src/pools/cluster/dynamic.ts
src/pools/cluster/fixed.ts
src/pools/thread/dynamic.ts
src/pools/thread/fixed.ts
tests/pools/abstract/abstract-pool.test.js
tests/pools/cluster/fixed.test.js
tests/pools/selection-strategies.test.js
tests/pools/thread/fixed.test.js

index 03763a6e6f1def336fb026eaeb8065bf051d9763..b838afe86c3d49c4afb2c9840cd0e1beac306a48 100644 (file)
@@ -13,9 +13,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Breaking Changes
 
-- `maxInactiveTime` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
+- `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
   _Find more details on our JSDoc._
 
+- `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
+
 - We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
 
 ### Pool options types declaration merge
index 96008eb2a9af79f9e01547aaf00ebfaaf0c488ef..83ec2122c2bf11bc4aab12c28bf50676f88b5fcd 100644 (file)
--- a/README.md
+++ b/README.md
@@ -155,7 +155,6 @@ You can use node versions 12.x, 13.x, 14.x
 - `errorHandler` - A function that will listen for error event on each worker
 - `onlineHandler` - A function that will listen for online event on each worker
 - `exitHandler` - A function that will listen for exit event on each worker
-- `maxTasks` - This is just to avoid not useful warnings message, is used to set [maxListeners](https://nodejs.org/dist/latest-v12.x/docs/api/events.html#events_emitter_setmaxlisteners_n) on event emitters (workers are event emitters)
 
 ### `pool = new DynamicThreadPool/DynamicClusterPool(min, max, filePath, opts)`
 
index 468eee3b68db72e0d67671aeaf493d2e2b50e5ef..7e607c87059229431490d29e1cee0b56b5e2d51c 100644 (file)
@@ -5,10 +5,7 @@ const size = 30
 const dynamicPool = new DynamicClusterPool(
   size / 2,
   size * 3,
-  './benchmarks/internal/cluster/worker.js',
-  {
-    maxTasks: 10000
-  }
+  './benchmarks/internal/cluster/worker.js'
 )
 
 async function dynamicClusterTest (
index f2b80c7198d71872e6ad858c7db661b1894ee46b..1fd8d6797c62e1db75e362225e07958d4c5f9dd7 100644 (file)
@@ -4,10 +4,7 @@ const size = 30
 
 const fixedPool = new FixedClusterPool(
   size,
-  './benchmarks/internal/cluster/worker.js',
-  {
-    maxTasks: 10000
-  }
+  './benchmarks/internal/cluster/worker.js'
 )
 
 async function fixedClusterTest (
index dde75474daccf296dfab673737e02c5082cc787c..f3f0e04977e3ee718180bd3122b5d08b39ef3497 100644 (file)
@@ -2,9 +2,7 @@ const { DynamicThreadPool } = require('../../../lib/index')
 
 const size = 30
 
-const dynamicPool = new DynamicThreadPool(size / 2, size * 3, './worker.js', {
-  maxTasks: 10000
-})
+const dynamicPool = new DynamicThreadPool(size / 2, size * 3, './worker.js')
 
 async function dynamicThreadTest (
   { tasks, workerData } = { tasks: 1, workerData: { proof: 'ok' } }
index 8db41acbde4f40cb38104aaedc009d87c3b43111..8168a6dc20ca113dad6c8ac532b182ce94ac9ac7 100644 (file)
@@ -2,9 +2,7 @@ const { FixedThreadPool } = require('../../../lib/index')
 
 const size = 30
 
-const fixedPool = new FixedThreadPool(size, './worker.js', {
-  maxTasks: 10000
-})
+const fixedPool = new FixedThreadPool(size, './worker.js')
 
 async function fixedThreadTest (
   { tasks, workerData } = { tasks: 1, workerData: { proof: 'ok' } }
index 6a7406bc9913c0a83efd918008dd27418efed3e1..42c06e62aaa15b363ca8120f3db463f8a95be185 100644 (file)
@@ -11,10 +11,7 @@ const data = {
 const dynamicPool = new DynamicThreadPool(
   size,
   size * 3,
-  './workers/poolifier/function-to-bench-worker.js',
-  {
-    maxTasks: 10000
-  }
+  './workers/poolifier/function-to-bench-worker.js'
 )
 
 async function run () {
index c994620899f15283d478b3d9494186607b109a66..345fd80672ca6faa4289c7da2eb4f97088199c78 100644 (file)
@@ -10,10 +10,7 @@ const data = {
 
 const fixedPool = new FixedThreadPool(
   size,
-  './workers/poolifier/function-to-bench-worker.js',
-  {
-    maxTasks: 100000
-  }
+  './workers/poolifier/function-to-bench-worker.js'
 )
 
 async function run () {
index 38187edc41b462fc9944744f3cfbce16d9c595e4..9d7e4f0c2306ad2dd9970cc7ac7cd9094959b136 100644 (file)
@@ -82,15 +82,6 @@ export interface PoolOptions<Worker> {
    * A function that will listen for exit event on each worker.
    */
   exitHandler?: ExitHandler<Worker>
-  /**
-   * This is just to avoid non-useful warning messages.
-   *
-   * Will be used to set `maxListeners` on event emitters (workers are event emitters).
-   *
-   * @default 1000
-   * @see [Node events emitter.setMaxListeners(n)](https://nodejs.org/api/events.html#events_emitter_setmaxlisteners_n)
-   */
-  maxTasks?: number
   /**
    * The work choice strategy to use in this pool.
    */
@@ -152,12 +143,12 @@ export abstract class AbstractPool<
    *
    * @param numberOfWorkers Number of workers that this pool should manage.
    * @param filePath Path to the worker-file.
-   * @param opts Options for the pool. Default: `{ maxTasks: 1000 }`
+   * @param opts Options for the pool.
    */
   public constructor (
     public readonly numberOfWorkers: number,
     public readonly filePath: string,
-    public readonly opts: PoolOptions<Worker> = { maxTasks: 1000 }
+    public readonly opts: PoolOptions<Worker>
   ) {
     if (!this.isMain()) {
       throw new Error('Cannot start a pool from a worker!')
index 5445bd03d4a4faf772610c3c966b4056231319de..4a5f720aca0a315af076cfacd3bb17725f27a3a8 100644 (file)
@@ -23,13 +23,13 @@ export class DynamicClusterPool<
    * @param min Minimum number of workers which are always active.
    * @param max Maximum number of workers that can be created by this pool.
    * @param filePath Path to an implementation of a `ClusterWorker` file, which can be relative or absolute.
-   * @param opts Options for this dynamic cluster pool. Default: `{ maxTasks: 1000 }`
+   * @param opts Options for this dynamic cluster pool. Default: `{}`
    */
   public constructor (
     min: number,
     public readonly max: number,
     filePath: string,
-    opts: ClusterPoolOptions = { maxTasks: 1000 }
+    opts: ClusterPoolOptions = {}
   ) {
     super(min, filePath, opts)
   }
index 4ec81c07bab66b0ebad1cb3eed371ea568989ef0..f651d3ade895fdfee56497e642c7e4ce155ead06 100644 (file)
@@ -38,12 +38,12 @@ export class FixedClusterPool<
    *
    * @param numberOfWorkers Number of workers for this pool.
    * @param filePath Path to an implementation of a `ClusterWorker` file, which can be relative or absolute.
-   * @param opts Options for this fixed cluster pool. Default: `{ maxTasks: 1000 }`
+   * @param opts Options for this fixed cluster pool. Default: `{}`
    */
   public constructor (
     numberOfWorkers: number,
     filePath: string,
-    public readonly opts: ClusterPoolOptions = { maxTasks: 1000 }
+    public readonly opts: ClusterPoolOptions = {}
   ) {
     super(numberOfWorkers, filePath, opts)
   }
@@ -81,9 +81,7 @@ export class FixedClusterPool<
   }
 
   protected afterWorkerSetup (worker: Worker): void {
-    // We will attach a listener for every task,
-    // when task is completed the listener will be removed but to avoid warnings we are increasing the max listeners size
-    worker.setMaxListeners(this.opts.maxTasks ?? 1000)
+    // Listen worker messages.
     this.registerWorkerMessageListener(worker, super.workerListener())
   }
 }
index fcf4b2ff4652b58b3050adbd46153d4b9ca2c10c..04125854e2f24e7bb6c1d058bb57fa953105eb35 100644 (file)
@@ -24,13 +24,13 @@ export class DynamicThreadPool<
    * @param min Minimum number of threads which are always active.
    * @param max Maximum number of threads that can be created by this pool.
    * @param filePath Path to an implementation of a `ThreadWorker` file, which can be relative or absolute.
-   * @param opts Options for this dynamic thread pool. Default: `{ maxTasks: 1000 }`
+   * @param opts Options for this dynamic thread pool. Default: `{}`
    */
   public constructor (
     min: number,
     public readonly max: number,
     filePath: string,
-    opts: PoolOptions<ThreadWorkerWithMessageChannel> = { maxTasks: 1000 }
+    opts: PoolOptions<ThreadWorkerWithMessageChannel> = {}
   ) {
     super(min, filePath, opts)
   }
index 1c91caa752702fefcccecb88074875ea4a27031c..6fec9aa04db6af79c7eac3deae91d09b4d311cd4 100644 (file)
@@ -30,12 +30,12 @@ export class FixedThreadPool<
    *
    * @param numberOfThreads Number of threads for this pool.
    * @param filePath Path to an implementation of a `ThreadWorker` file, which can be relative or absolute.
-   * @param opts Options for this fixed thread pool. Default: `{ maxTasks: 1000 }`
+   * @param opts Options for this fixed thread pool. Default: `{}`
    */
   public constructor (
     numberOfThreads: number,
     filePath: string,
-    opts: PoolOptions<ThreadWorkerWithMessageChannel> = { maxTasks: 1000 }
+    opts: PoolOptions<ThreadWorkerWithMessageChannel> = {}
   ) {
     super(numberOfThreads, filePath, opts)
   }
@@ -78,9 +78,7 @@ export class FixedThreadPool<
     worker.postMessage({ parent: port1 }, [port1])
     worker.port1 = port1
     worker.port2 = port2
-    // We will attach a listener for every task,
-    // when the task is completed the listener will be removed but to avoid warnings we are increasing the max listeners size.
-    worker.port2.setMaxListeners(this.opts.maxTasks ?? 1000)
+    // Listen worker messages.
     this.registerWorkerMessageListener(worker, super.workerListener())
   }
 }
index 482ce5e39db81c3eb90b92808052a99790049873..5d6311b9b4b8b7d581531007803574d83935610b 100644 (file)
@@ -18,10 +18,7 @@ describe('Abstract pool test suite', () => {
   it('Simulate worker not found during increaseWorkersTask', () => {
     const pool = new StubPoolWithTasksMapClear(
       1,
-      './tests/worker-files/thread/testWorker.js',
-      {
-        errorHandler: e => console.error(e)
-      }
+      './tests/worker-files/thread/testWorker.js'
     )
     // Simulate worker not found.
     pool.removeAllWorker()
index 0eb21d0716c32ac19bdb321a24253a31ed0eb44a..a5eaa29ab5a4b1430066721decf5c451f8ae9180 100644 (file)
@@ -2,7 +2,6 @@ const expect = require('expect')
 const { FixedClusterPool } = require('../../../lib/index')
 const TestUtils = require('../../test-utils')
 const numberOfWorkers = 10
-const maxTasks = 500
 const pool = new FixedClusterPool(
   numberOfWorkers,
   './tests/worker-files/cluster/testWorker.js',
@@ -34,10 +33,7 @@ const asyncErrorPool = new FixedClusterPool(
 )
 const asyncPool = new FixedClusterPool(
   1,
-  './tests/worker-files/cluster/asyncWorker.js',
-  {
-    maxTasks: maxTasks
-  }
+  './tests/worker-files/cluster/asyncWorker.js'
 )
 
 describe('Fixed cluster pool test suite', () => {
@@ -118,11 +114,6 @@ describe('Fixed cluster pool test suite', () => {
     expect(usedTime).toBeGreaterThanOrEqual(2000)
   })
 
-  it('Verify that maxTasks is set properly', async () => {
-    const worker = asyncPool.chooseWorker()
-    expect(worker.getMaxListeners()).toBe(maxTasks)
-  })
-
   it('Shutdown test', async () => {
     const exitPromise = TestUtils.waitExits(pool, numberOfWorkers)
     await pool.destroy()
index 0c5e461155d0820fed1de17f07381a5eecb64078..604dda3d52f9ed46165e8943d145b4bc99c1e8e0 100644 (file)
@@ -66,10 +66,7 @@ describe('Selection strategies test suite', () => {
           min,
           max,
           './tests/worker-files/thread/testWorker.js',
-          {
-            maxTasks: 1000,
-            workerChoiceStrategy: 'UNKNOWN_STRATEGY'
-          }
+          { workerChoiceStrategy: 'UNKNOWN_STRATEGY' }
         )
     ).toThrowError(
       new Error("Worker choice strategy 'UNKNOWN_STRATEGY' not found")
index 9a2d74d30bc2f2bb194effd9494b90bf7252b6ed..cc60a9b5a021253819445d46ff49fab6e91abe2f 100644 (file)
@@ -2,7 +2,6 @@ const expect = require('expect')
 const { FixedThreadPool } = require('../../../lib/index')
 const TestUtils = require('../../test-utils')
 const numberOfThreads = 10
-const maxTasks = 400
 const pool = new FixedThreadPool(
   numberOfThreads,
   './tests/worker-files/thread/testWorker.js',
@@ -28,8 +27,7 @@ const errorPool = new FixedThreadPool(
 )
 const asyncPool = new FixedThreadPool(
   1,
-  './tests/worker-files/thread/asyncWorker.js',
-  { maxTasks: maxTasks }
+  './tests/worker-files/thread/asyncWorker.js'
 )
 
 describe('Fixed thread pool test suite', () => {
@@ -96,11 +94,6 @@ describe('Fixed thread pool test suite', () => {
     expect(usedTime).toBeGreaterThanOrEqual(2000)
   })
 
-  it('Verify that maxTasks is set properly', async () => {
-    const worker = asyncPool.chooseWorker()
-    expect(worker.port2.getMaxListeners()).toBe(maxTasks)
-  })
-
   it('Shutdown test', async () => {
     const exitPromise = TestUtils.waitExits(pool, numberOfThreads)
     await pool.destroy()