Détail du package

poolifier

poolifier56.8kMIT5.1.7

Fast and small Node.js Worker_Threads and Cluster Worker Pool

nodejs, worker pool, thread pool, worker_threads

readme

# Node.js Worker_Threads and Cluster Worker Pool
GitHub commit activity (master) Npm Version JSR Version CI Workflow Code Coverage Quality Gate Status neostandard Javascript Code Style Discord Open Collective PRs Welcome No Dependencies

Why Poolifier?

Poolifier is used to perform CPU and/or I/O intensive tasks on Node.js servers, it implements worker pools using worker_threads and cluster Node.js modules.
With poolifier you can improve your performance and resolve problems related to the event loop.
Moreover you can execute your tasks using an API designed to improve the developer experience.
Please consult our general guidelines.

  • Easy to use :white_check_mark:
  • Fixed and dynamic pool size :white_check_mark:
  • Easy switch from a pool type to another :white_check_mark:
  • Performance benchmarks :white_check_mark:
  • No runtime dependencies :white_check_mark:
  • Proper integration with Node.js async_hooks :white_check_mark:
  • Support for CommonJS, ESM and TypeScript :white_check_mark:
  • Support for worker_threads and cluster Node.js modules :white_check_mark:
  • Tasks distribution strategies :white_check_mark:
  • Lockless tasks queueing :white_check_mark:
  • Queued tasks rescheduling:
    • Task stealing on idle :white_check_mark:
    • Tasks stealing under back pressure :white_check_mark:
    • Tasks redistribution on worker error :white_check_mark:
  • Support for sync and async task function :white_check_mark:
  • Support for abortable task function :white_check_mark:
  • Support for multiple task functions with per task function queuing priority and tasks distribution strategy :white_check_mark:
  • Support for task functions CRUD operations at runtime :white_check_mark:
  • General guidelines on pool choice :white_check_mark:
  • Error handling out of the box :white_check_mark:
  • Widely tested :white_check_mark:
  • Active community :white_check_mark:
  • Code quality Bugs Code Smells Duplicated Lines (%) Maintainability Rating Reliability Rating Technical Debt
  • Code security Security Rating Vulnerabilities

Table of contents

Overview

Poolifier contains two worker_threads/cluster worker pool implementations, you don't have to deal with worker_threads/cluster complexity.
The first implementation is a fixed worker pool, with a defined number of workers that are started at creation time and will be reused.
The second implementation is a dynamic worker pool, with a number of worker started at creation time (these workers will be always active and reused) and other workers created when the load will increase (with an upper limit, these workers will be reused when active), the newly created workers will be stopped after a configurable period of inactivity.
You have to implement your worker by extending the ThreadWorker or ClusterWorker class.

Installation

npmjs

npm install poolifier --save

JSR

npx jsr add @poolifier/poolifier

Usage

You can implement a poolifier worker_threads worker in a simple way by extending the class ThreadWorker:

import { ThreadWorker } from 'poolifier'

function yourFunction(data) {
  // this will be executed in the worker thread,
  // the data will be received by using the execute method
  return { ok: 1 }
}

export default new ThreadWorker(yourFunction, {
  maxInactiveTime: 60000,
})

Instantiate your pool based on your needs :

import { DynamicThreadPool, FixedThreadPool, PoolEvents, availableParallelism } from 'poolifier'

// a fixed worker_threads pool
const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', {
  onlineHandler: () => console.info('worker is online'),
  errorHandler: e => console.error(e),
})

pool.emitter?.on(PoolEvents.ready, () => console.info('Pool is ready'))
pool.emitter?.on(PoolEvents.busy, () => console.info('Pool is busy'))

// or a dynamic worker_threads pool
const pool = new DynamicThreadPool(Math.floor(availableParallelism() / 2), availableParallelism(), './yourWorker.js', {
  onlineHandler: () => console.info('worker is online'),
  errorHandler: e => console.error(e),
})

pool.emitter?.on(PoolEvents.full, () => console.info('Pool is full'))
pool.emitter?.on(PoolEvents.ready, () => console.info('Pool is ready'))
pool.emitter?.on(PoolEvents.busy, () => console.info('Pool is busy'))

// the execute method signature is the same for both implementations,
// so you can easily switch from one to another
try {
  const res = await pool.execute()
  console.info(res)
} catch (err) {
  console.error(err)
}

You can do the same with the classes ClusterWorker, FixedClusterPool and DynamicClusterPool.

See examples for more details:

Remember that workers can only send and receive structured-cloneable data.

Node.js versions

Node.js versions >= 20.x.x are supported.

API

General guidelines

Worker choice strategies

Contribute

Choose your task here, propose an idea, a fix, an improvement.

See CONTRIBUTING guidelines.

Team

Creator/Owner:

Maintainers:

Contributors:

License

MIT

changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

5.1.7 (2025-11-16)

🐞 Bug Fixes

  • examples: properly handle ws raw data (c410293)
  • potention race on circular buffer size (3b33f0f)

⚡ Performance

  • switch default worker choice strategy to LEAST_USED (1dadb96)

✨ Polish

  • migrate benchmarks to tinybench (b4c993e)

📚 Documentation

🤖 Automation

  • deps-dev: bump @biomejs/biome in the regular group (#2987) (db44d10)
  • deps-dev: bump @types/node in the regular group (#2991) (6f7fe88)
  • deps-dev: bump clean-publish from 5.2.2 to 6.0.1 (#3031) (e7fd82d)
  • deps-dev: bump eslint from 9.35.0 to 9.36.0 (9e35aa3)
  • deps-dev: bump eslint-plugin-jsdoc from 54.5.0 to 56.1.2 (#2989) (bd25edb)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (#2975) (8576334)
  • deps-dev: bump globals from 16.3.0 to 16.4.0 in the regular group (1b12c14)
  • deps-dev: bump rollup from 4.48.1 to 4.49.0 in the regular group (#2970) (6df2b5f)
  • deps-dev: bump the regular group across 1 directory with 11 updates (#3011) (e4e8d00)
  • deps-dev: bump the regular group across 11 directories with 1 update (473f4c3)
  • deps-dev: bump the regular group across 11 directories with 1 update (c458f79)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2978) (eb571ba)
  • deps-dev: bump the regular group across 11 directories with 2 updates (#3029) (e0befec)
  • deps-dev: bump the regular group across 6 directories with 1 update (7146480)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2971) (b9650fc)
  • deps-dev: bump the regular group across 6 directories with 1 update (#3032) (ee28b0f)
  • deps-dev: bump the regular group with 2 updates (a5d8135)
  • deps-dev: bump the regular group with 2 updates (#2977) (92a1ceb)
  • deps-dev: bump the regular group with 2 updates (#3012) (cc8b2cb)
  • deps-dev: bump the regular group with 2 updates (#3033) (ec1981d)
  • deps-dev: bump the regular group with 3 updates (1d390fc)
  • deps-dev: bump the regular group with 3 updates (66db8fb)
  • deps-dev: bump the regular group with 3 updates (189332b)
  • deps-dev: bump the regular group with 4 updates (#3027) (1a83c87)
  • deps-dev: bump the regular group with 5 updates (#2973) (b403b08)
  • deps-dev: bump the regular group with 5 updates (#3030) (a6892a9)
  • deps-dev: bump typescript in the typescript group (#3008) (1b7cff1)
  • deps: bump actions/setup-node from 4 to 5 (#2976) (0aa38f3)
  • deps: bump actions/setup-node from 5 to 6 (#3022) (167ea45)
  • deps: bump axios (#2990) (b8cca95)
  • deps: bump axios from 1.12.2 to 1.13.0 in /examples/typescript/http-client-pool in the regular group across 1 directory (af05b6d)
  • deps: bump github/codeql-action from 3 to 4 (#3015) (3dccb1e)
  • deps: bump nodemailer in /examples/typescript/smtp-client-pool (#3014) (ce1a63b)
  • deps: bump sonarsource/sonarqube-scan-action from 5.3.0 to 5.3.1 (#2972) (ec8faae)
  • deps: bump sonarsource/sonarqube-scan-action from 5.3.1 to 6.0.0 (#2997) (49e8720)
  • deps: bump the regular group across 11 directories with 1 update (#2969) (c01f744)
  • deps: bump the regular group across 11 directories with 2 updates (#2992) (f27aa26)
  • deps: bump the regular group across 11 directories with 4 updates (2ad1da0)
  • deps: bump the regular group across 11 directories with 5 updates (#3009) (c9d288b)
  • deps: bump the regular group across 3 directories with 1 update (b299023)
  • deps: bump the regular group across 7 directories with 2 updates (#2974) (b22eee6)
  • deps: bump the regular group across 7 directories with 2 updates (#3034) (833e127)

5.1.6 (2025-08-26)

🐞 Bug Fixes

  • use strict object equality in tasks stealing code (eec0932)

✨ Polish

  • cleanup nested conditions (4377e4a)

📚 Documentation

🤖 Automation

  • deps-dev: bump the regular group with 2 updates (#2966) (b988f54)
  • deps: bump the regular group across 11 directories with 2 updates (#2967) (4119b66)

5.1.5 (2025-08-23)

⚡ Performance

  • add adaptive aging factor to priority queue (66c08e6)
  • soften priority queue adaptive aging (6730e51)

📚 Documentation

5.1.4 (2025-08-22)

🐞 Bug Fixes

  • ensure destroy event has up2date pool info (c4138fc)

✨ Polish

  • make pool destroy() more robust (8b444c5)
  • reorder task finished event emission (e2f9978)

📚 Documentation

5.1.3 (2025-08-21)

🐞 Bug Fixes

  • properly account strategy retries on a per strategy basis (910c169)

⚡ Performance

  • reduce pool info property internal usage (662c6c1)

🧪 Tests

  • cleanup worker selection strategies test (b283bd6)

📚 Documentation

🤖 Automation

  • deps: bump the regular group across 11 directories with 1 update (23a0e5f)
  • deps: bump the regular group across 11 directories with 1 update (#2961) (6c58a40)

5.1.2 (2025-08-20)

🐞 Bug Fixes

  • avoid starvation with task priority (0055d2c)

✨ Polish

  • add guard to priority queue delete() (4b7df91)
  • flag fixed queue internal storage data structure readonly (f867622)

📚 Documentation

5.1.1 (2025-08-19)

🐞 Bug Fixes

  • handle more task function declaration signatures (aa06657)
  • worker index identification at tasks stealing under back pressure (ae736ce)

✨ Polish

  • avoid delete usage (39cb900)
  • cleanup worker selection strategies code (60da3e6)
  • refine error messages (d03a706)

📚 Documentation

🤖 Automation

  • deps-dev: bump @types/node in the regular group (#2935) (cc27648)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (#2933) (85e355c)
  • deps-dev: bump the regular group across 1 directory with 3 updates (#2940) (3cb877a)
  • deps-dev: bump the regular group across 1 directory with 3 updates (#2954) (d34f1ec)
  • deps-dev: bump the regular group across 1 directory with 6 updates (348ff1f)
  • deps-dev: bump the regular group across 11 directories with 1 update (1614af7)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2936) (5d1e63c)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2941) (f916f0a)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2955) (9a15e97)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2938) (df3b3f2)
  • deps-dev: bump the regular group across 6 directories with 2 updates (#2930) (287a21b)
  • deps-dev: bump the regular group with 2 updates (#2931) (76a12f4)
  • deps-dev: bump the regular group with 2 updates (#2943) (73060fd)
  • deps-dev: bump typescript in the typescript group (#2942) (b65f4dc)
  • deps: bump actions/checkout from 4 to 5 (#2950) (6cc40dd)
  • deps: bump sonarsource/sonarqube-scan-action from 5.2.0 to 5.3.0 (#2934) (a18fcb5)
  • deps: bump the regular group across 11 directories with 3 updates (#2932) (364bf42)
  • deps: bump the regular group across 3 directories with 1 update (#2952) (cfc45f3)

5.1.0 (2025-07-15)

🚀 Features

  • account task wait time in least ELU strategy (673d651)

✨ Polish

  • queue: cleanup variables namespace (5434cce)

🧪 Tests

📚 Documentation

🤖 Automation

  • deps-dev: bump the regular group with 2 updates (#2927) (b39240e)
  • deps: bump the regular group across 11 directories with 1 update (#2926) (92acda5)

5.0.9 (2025-07-11)

🐞 Bug Fixes

  • ensure worker ready handler is registered once on windows (#2917) (906c321)

📚 Documentation

🤖 Automation

  • deps: bump the regular group across 11 directories with 2 updates (#2923) (d610205)

5.0.8 (2025-07-11)

⚡ Performance

  • avoid recursion in task queueing iterator (359c1fd)

📚 Documentation

5.0.7 (2025-07-10)

🐞 Bug Fixes

  • worker node destroy race condition at pool destroy (655eec0)

✨ Polish

  • refine waitWorkerNodeEvents() API (840352e)

🧪 Tests

  • refine expectations (365b12f)
  • refine pool destroy time expectation (e5a1ff9)

📚 Documentation

🤖 Automation

  • deps-dev: bump the regular group across 11 directories with 1 update (#2920) (6023207)
  • deps: bump the regular group across 11 directories with 2 updates (#2919) (6d9800d)

5.0.6 (2025-07-08)

🐞 Bug Fixes

  • ensure dynamic worker can't be created at pool destroy (#2916) (1e453b0)
  • ensure worker kill message response is not handled by the generic (1b20484)

✨ Polish

  • add worker strategy name to help UTs debug (8d3efca)
  • cleanup task function ops method (62242b7)
  • ensure safer access to worker node status (a92483b)
  • improve messaging worker id check error message (d5e7715)

🧪 Tests

  • account properly for kill message timeout (0a30f36)
  • adjust elapsed max time at pool destroy (eb3c07e)
  • enlarge mocha timeout (fd79a70)
  • increase mocha timeout (1670c56)
  • put back initial margin at timeout expectation (2879ec7)
  • refine expectation (5c5f380)

📚 Documentation

5.0.5 (2025-07-07)

🐞 Bug Fixes

  • close potential event listeners leak (e1e4d40)
  • fix potential ressource leaks (3386e26)
  • plug more ressource leaks (42447ec)

✨ Polish

  • cleanup priority queue code (4ad3a82)

📚 Documentation

5.0.4 (2025-07-06)

🐞 Bug Fixes

  • fix worker usage statistics computation (f6392d5)

📚 Documentation

5.0.3 (2025-07-06)

🐞 Bug Fixes

⚡ Performance

  • remove unneeded null check at building abortable task function (0961d2d)

📚 Documentation

🤖 Automation

  • deps-dev: bump rollup from 4.44.1 to 4.44.2 in the regular group (c026beb)
  • deps-dev: bump rollup from 4.44.1 to 4.44.2 in the regular group (6f8b8be)
  • deps-dev: bump the regular group across 6 directories with 1 update (177eb45)
  • deps-dev: bump the regular group across 6 directories with 1 update (fa5a898)
  • deps: bump the regular group across 11 directories with 1 update (#2911) (a3116ee)

5.0.2 (2025-07-02)

✨ Polish

📚 Documentation

🤖 Automation

  • deps-dev: bump the regular group with 3 updates (#2908) (fb89f99)
  • deps: bump the regular group across 11 directories with 2 updates (#2909) (e738863)

5.0.1 (2025-07-01)

⚡ Performance

  • remove unneeded worker class event emitter inheritance (8e77a4e)

📚 Documentation

5.0.0 (2025-07-01)

⚠ BREAKING CHANGES

  • add abortable task support (#1625)
  • drop node 18.x.x support

🚀 Features

🐞 Bug Fixes

  • ensure using task abortion API is not altering operations (1c02490)

✨ Polish

  • examples: convert JS examples to ESM (1df73e2)
  • factor out worker info initialization (559c196)
  • flag some object literals as read only (7cec62a)
  • flag strategy policy property as read only (49d5352)
  • revert flagging worker options as readonly (5c85bc8)
  • safer access to worker nodes array element (c18e053)

📚 Documentation

🤖 Automation

  • deps-dev: bump @cspell/eslint-plugin from 8.19.4 to 9.0.0 (#2850) (464e344)
  • deps-dev: bump @types/node from 22.15.31 to 24.0.1 (17bdb1d)
  • deps-dev: bump @types/node in the regular group (dc2b5cc)
  • deps-dev: bump @types/node in the regular group (3280401)
  • deps-dev: bump @types/node in the regular group (#2719) (4de0bb1)
  • deps-dev: bump c8 from 10.1.2 to 10.1.3 in the regular group (#2704) (5e73f65)
  • deps-dev: bump eslint from 9.20.0 to 9.20.1 in the regular group (#2759) (d76332c)
  • deps-dev: bump eslint-plugin-jsdoc (#2792) (85c7e85)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (#2732) (db4ab8e)
  • deps-dev: bump eslint-plugin-perfectionist from 4.2.0 to 4.3.0 in the regular group (5b73f1b)
  • deps-dev: bump eslint-plugin-perfectionist in the regular group (8baff0c)
  • deps-dev: bump eslint-plugin-perfectionist in the regular group (#2696) (139f180)
  • deps-dev: bump globals from 15.15.0 to 16.0.0 (ea744d1)
  • deps-dev: bump lint-staged in the regular group (#2716) (a13453a)
  • deps-dev: bump lint-staged in the regular group (#2793) (2ec254b)
  • deps-dev: bump mocha from 10.8.2 to 11.0.1 (6a58dbe)
  • deps-dev: bump rollup from 4.28.0 to 4.28.1 in the regular group (#2701) (d80c1fb)
  • deps-dev: bump rollup from 4.29.1 to 4.30.0 in the regular group (#2723) (e544197)
  • deps-dev: bump rollup from 4.30.1 to 4.31.0 in the regular group (#2733) (c6aa3b6)
  • deps-dev: bump rollup from 4.34.3 to 4.34.4 in the regular group (#2754) (a53dfd9)
  • deps-dev: bump rollup from 4.34.4 to 4.34.6 in the regular group (#2755) (962f48b)
  • deps-dev: bump rollup from 4.34.7 to 4.34.8 in the regular group (dac6d1e)
  • deps-dev: bump sinon from 19.0.4 to 20.0.0 (987f564)
  • deps-dev: bump the major group across 11 directories with 1 update (b58786f)
  • deps-dev: bump the regular group across 1 directory with 2 updates (#2871) (461f974)
  • deps-dev: bump the regular group across 1 directory with 3 updates (7e0174e)
  • deps-dev: bump the regular group across 1 directory with 3 updates (#2799) (770dbf6)
  • deps-dev: bump the regular group across 1 directory with 3 updates (#2853) (db27204)
  • deps-dev: bump the regular group across 1 directory with 4 updates (#2740) (250a5c2)
  • deps-dev: bump the regular group across 1 directory with 4 updates (#2762) (d9d978e)
  • deps-dev: bump the regular group across 1 directory with 5 updates (1ca632a)
  • deps-dev: bump the regular group across 1 directory with 5 updates (69da033)
  • deps-dev: bump the regular group across 1 directory with 6 updates (#2832) (64aaa54)
  • deps-dev: bump the regular group across 1 directory with 6 updates (#2905) (27b8ce7)
  • deps-dev: bump the regular group across 11 directories with 1 update (4447723)
  • deps-dev: bump the regular group across 11 directories with 1 update (cb37be8)
  • deps-dev: bump the regular group across 11 directories with 1 update (a342e25)
  • deps-dev: bump the regular group across 11 directories with 1 update (4a46785)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2678) (f6295c9)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2706) (bcb196c)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2718) (55e8cba)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2720) (17d0255)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2721) (e30f285)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2725) (1abaf3b)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2728) (4232c91)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2729) (b1eba65)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2761) (a4a667e)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2801) (f077135)
  • deps-dev: bump the regular group across 11 directories with 2 updates (72cbf35)
  • deps-dev: bump the regular group across 11 directories with 2 updates (858082a)
  • deps-dev: bump the regular group across 11 directories with 2 updates (60f4947)
  • deps-dev: bump the regular group across 11 directories with 2 updates (dddfdd9)
  • deps-dev: bump the regular group across 11 directories with 2 updates (#2673) (0c16d16)
  • deps-dev: bump the regular group across 11 directories with 2 updates (#2742) (31bf8fa)
  • deps-dev: bump the regular group across 11 directories with 2 updates (#2748) (3da0b33)
  • deps-dev: bump the regular group across 3 directories with 1 update (#2782) (dc882d6)
  • deps-dev: bump the regular group across 6 directories with 1 update (00333a1)
  • deps-dev: bump the regular group across 6 directories with 1 update (24ac963)
  • deps-dev: bump the regular group across 6 directories with 1 update (de189d7)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2672) (c0da3eb)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2713) (a31119f)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2734) (d5a0dab)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2747) (f7f9688)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2750) (31c9639)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2753) (73c88bd)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2756) (f4fa41c)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2795) (e4427bb)
  • deps-dev: bump the regular group with 2 updates (f8573f7)
  • deps-dev: bump the regular group with 2 updates (b45be86)
  • deps-dev: bump the regular group with 2 updates (#2686) (5b0b3ec)
  • deps-dev: bump the regular group with 2 updates (#2687) (8538d2d)
  • deps-dev: bump the regular group with 2 updates (#2699) (f611856)
  • deps-dev: bump the regular group with 2 updates (#2703) (824e614)
  • deps-dev: bump the regular group with 2 updates (#2705) (651c6ad)
  • deps-dev: bump the regular group with 2 updates (#2712) (7ab7265)
  • deps-dev: bump the regular group with 2 updates (#2717) (c009945)
  • deps-dev: bump the regular group with 2 updates (#2722) (ed42e19)
  • deps-dev: bump the regular group with 2 updates (#2731) (eef6de1)
  • deps-dev: bump the regular group with 2 updates (#2735) (ef1d7c3)
  • deps-dev: bump the regular group with 2 updates (#2751) (419407c)
  • deps-dev: bump the regular group with 3 updates (875cfd9)
  • deps-dev: bump the regular group with 3 updates (4a3bc73)
  • deps-dev: bump the regular group with 3 updates (#2674) (5962b08)
  • deps-dev: bump the regular group with 3 updates (#2741) (8e8961a)
  • deps-dev: bump the regular group with 3 updates (#2746) (9b6791f)
  • deps-dev: bump the regular group with 3 updates (#2749) (4d3377c)
  • deps-dev: bump the regular group with 3 updates (#2796) (92a5935)
  • deps-dev: bump the regular group with 4 updates (2b3e146)
  • deps-dev: bump the regular group with 4 updates (#2727) (5f53600)
  • deps-dev: bump the regular group with 4 updates (#2758) (74d381a)
  • deps-dev: bump the regular group with 4 updates (#2800) (262f0bd)
  • deps-dev: bump the regular group with 5 updates (fcf7fb5)
  • deps-dev: bump the regular group with 5 updates (33d985e)
  • deps-dev: bump the regular group with 6 updates (#2708) (b28c4a0)
  • deps-dev: bump typedoc from 0.27.5 to 0.27.6 in the regular group (#2714) (02b3fd7)
  • deps-dev: bump typescript from 5.6.3 to 5.7.2 in the typescript group (888a482)
  • deps-dev: bump typescript in the typescript group (c25a831)
  • deps-dev: bump typescript in the typescript group (9c3cd13)
  • deps-dev: bump typescript in the typescript group (#2726) (11ae5b8)
  • deps: bump autofix-ci/action (3658535)
  • deps: bump autofix-ci/action (#2730) (678d003)
  • deps: bump autofix-ci/action (#2878) (e81d6c3)
  • deps: bump axios (#2698) (45ea45d)
  • deps: bump axios (#2794) (20f921b)
  • deps: bump axios in /examples/typescript/http-client-pool (#2787) (2b1cb19)
  • deps: bump fastify (#2827) (67ac7c9)
  • deps: bump sonarsource/sonarqube-scan-action from 4.1.0 to 4.2.1 (#2710) (d3e6de2)
  • deps: bump sonarsource/sonarqube-scan-action from 4.2.1 to 5.0.0 (813ec6f)
  • deps: bump sonarsource/sonarqube-scan-action from 5.0.0 to 5.1.0 (3cb8fd0)
  • deps: bump sonarsource/sonarqube-scan-action from 5.1.0 to 5.2.0 (#2844) (2984533)
  • deps: bump the major group across 1 directory with 2 updates (#2851) (af14148)
  • deps: bump the major group across 3 directories with 1 update (#2824) (bc6e64b)
  • deps: bump the regular group across 11 directories with 2 updates (17c48df)
  • deps: bump the regular group across 11 directories with 2 updates (53aa58f)
  • deps: bump the regular group across 11 directories with 2 updates (#2670) (9d9867f)
  • deps: bump the regular group across 11 directories with 2 updates (#2854) (b81f6a5)
  • deps: bump the regular group across 11 directories with 4 updates (#2904) (333fb1f)
  • deps: bump the regular group across 3 directories with 1 update (ca9be4f)
  • deps: bump the regular group across 3 directories with 1 update (#2715) (a877451)
  • deps: bump the regular group across 3 directories with 1 update (#2807) (cb86545)
  • deps: bump the regular group across 3 directories with 1 update (#2829) (ab4c5b0)
  • deps: bump the regular group across 4 directories with 2 updates (#2798) (728df55)
  • deps: bump the regular group across 7 directories with 2 updates (#2702) (ca2f04a)
  • deps: bump the regular group across 7 directories with 2 updates (#2709) (c4bed4c)
  • deps: bump the regular group across 7 directories with 2 updates (#2724) (3763050)

🧹 Chores

  • drop node 18.x.x support (b5a9d39)

4.4.5 (2024-11-15)

✨ Polish

🧪 Tests

  • refine some test expectations (7045f62)

📚 Documentation

  • generate typedoc documentation (92daba4)
  • integrate markdown files to typedoc (0e2d51f)
  • publish documentation (7da8035)

🤖 Automation

  • deps-dev: bump @cspell/eslint-plugin in the regular group (#2664) (e662b64)
  • deps-dev: bump @types/node (2cf0784)
  • deps-dev: bump @types/node (b321a0e)
  • deps-dev: bump @types/node (58bd59f)
  • deps-dev: bump @types/node (e473dd6)
  • deps-dev: bump @types/node (b3ea30b)
  • deps-dev: bump @types/node (1850017)
  • deps-dev: bump @types/node (7f7a9aa)
  • deps-dev: bump @types/node (58f9f01)
  • deps-dev: bump @types/node (1ed9c0c)
  • deps-dev: bump @types/node (2b573ed)
  • deps-dev: bump @types/node (da96745)
  • deps-dev: bump @types/node in the regular group (93fa53e)
  • deps-dev: bump @types/node in the regular group (#2663) (d29c280)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (#2665) (7a308ed)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2662) (da74442)
  • deps-dev: bump the regular group across 11 directories with 3 updates (#2661) (0642fd2)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2667) (91db59e)
  • deps-dev: bump the regular group with 2 updates (#2641) (8ce5f10)
  • deps-dev: bump the regular group with 2 updates (#2655) (3ab5b83)
  • deps-dev: bump the regular group with 2 updates (#2666) (14f6a63)
  • deps-dev: bump the regular group with 3 updates (#2658) (bd98fde)
  • deps-dev: bump the regular group with 4 updates (#2660) (5a7a5f6)
  • deps: bump the regular group across 11 directories with 2 updates (#2657) (0528e3a)
  • deps: bump the regular group across 11 directories with 3 updates (#2642) (8965906)
  • deps: bump the regular group across 7 directories with 2 updates (#2659) (aa28701)

4.4.4 (2024-10-26)

⚡ Performance

  • move tasks promise map entry deletion to a micro task (722a827)
  • use micro tasks in tasks handling code paths (48867d8)

📚 Documentation

4.4.3 (2024-10-26)

📚 Documentation

🤖 Automation

  • add clean-publish at npm package releasing (4f7ba01)
  • deps: bump the regular group across 11 directories with 2 updates (#2638) (e3e997e)

4.4.2 (2024-10-25)

🐞 Bug Fixes

  • ensure WorkerError similarity between cluster and worker-threads (1b12ff4)

✨ Polish

  • factor out WorkerError handling (6f82891)

📚 Documentation

🤖 Automation

  • deps: bump the regular group across 11 directories with 1 update (#2636) (42797ef)

4.4.1 (2024-10-24)

🐞 Bug Fixes

  • ensure worker error is propagated unchanged if possible (#2634) (7e582d6)

📚 Documentation

4.4.0 (2024-10-24)

🚀 Features

  • add worker side error stack trace to WorkerError (#2631) (5fd1e6b)

🐞 Bug Fixes

  • ci: untanble build from benchmarking scripts (693da4d)
  • fix production build (96e15f3)

⚡ Performance

  • speed up isAsyncFunction() helper (e155dc6)

📚 Documentation

🤖 Automation

  • ci: handle various release type on npm registry (c4c9bf6)
  • ci: node 23.x support (27461e4)
  • ci: switch to workflow token (c7f3208)
  • deps-dev: bump @biomejs/biome in the regular group (#2624) (c8da00b)
  • deps-dev: bump @types/node in the regular group (614a923)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (a8ab74a)
  • deps-dev: bump neostandard in the regular group (#2629) (b0bd470)
  • deps-dev: bump tatami-ng in the regular group (#2625) (cd27ebb)
  • deps-dev: bump the major group across 6 directories with 1 update (#2619) (5257d5f)
  • deps-dev: bump the regular group across 11 directories with 1 update (848c7ca)
  • deps-dev: bump the regular group across 6 directories with 1 update (6f9c249)
  • deps-dev: bump the regular group across 6 directories with 1 update (71c0ba1)
  • deps-dev: bump the regular group with 2 updates (5f7136a)
  • deps: bump the all group across 11 directories with 1 update (fac6bb8)

4.3.0 (2024-10-14)

🚀 Features

  • benchmarks: add bencher threshold checks (e56c70e)

🐞 Bug Fixes

  • benchmarks: add upper/lower values to BMF throughput (d6e6b64)
  • benchmarks: fix BMF report upper/lower values (0a98c64)
  • fix benchmarks report conversion to BMF format (8a93e4e)

⚡ Performance

  • pre-create worker if needed at the end of task execution (1d5588f)

✨ Polish

  • cleanup task function ops validation (f9e6cc3)
  • enable .editorconfig in biome formatter (cc46610)
  • turn on noImplicitOverride in TS configuration (ae85b35)

📚 Documentation

🤖 Automation

  • ci: fix task function ops tests (c79f502)
  • ci: silence linter error (0fd6ad4)
  • deps-dev: bump @cspell/eslint-plugin in the regular group (#2579) (954778b)
  • deps-dev: bump @eslint/js in the regular group (f487972)
  • deps-dev: bump @types/node in the regular group (17f15a0)
  • deps-dev: bump @types/nodemailer (bba21a2)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (e1332ea)
  • deps-dev: bump sinon from 18.0.1 to 19.0.2 in the major group (e62369f)
  • deps-dev: bump tatami-ng from 0.7.0 to 0.7.1 in the regular group (e272166)
  • deps-dev: bump tatami-ng from 0.8.2 to 0.8.3 in the regular group (f0bab52)
  • deps-dev: bump tatami-ng from 0.8.3 to 0.8.4 in the regular group (e589b14)
  • deps-dev: bump the major group across 3 directories with 1 update (00d085d)
  • deps-dev: bump the regular group across 11 directories with 1 update (10180df)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2584) (6a1b9a9)
  • deps-dev: bump the regular group across 11 directories with 2 updates (9bfa445)
  • deps-dev: bump the regular group across 6 directories with 1 update (#2581) (338568b)
  • deps-dev: bump the regular group with 2 updates (ff958ab)
  • deps-dev: bump the regular group with 2 updates (4fbd388)
  • deps-dev: bump the regular group with 2 updates (bca88d2)
  • deps-dev: bump the regular group with 2 updates (ce4ca7a)
  • deps-dev: bump the regular group with 2 updates (#2583) (49ad9d2)
  • deps-dev: bump the regular group with 3 updates (#2582) (eaeb55b)
  • deps-dev: bump the regular group with 4 updates (#2585) (dab2d0f)
  • deps-dev: bump typescript (1e9bf5f)
  • deps-dev: bump typescript (dedf743)
  • deps-dev: bump typescript (425925a)
  • deps-dev: bump typescript (94fba1e)
  • deps-dev: bump typescript (b4d6c8f)
  • deps-dev: bump typescript (10c8877)
  • deps-dev: bump typescript (2c623f9)
  • deps-dev: bump typescript (a404672)
  • deps-dev: bump typescript (895a334)
  • deps-dev: bump typescript (c154fe0)
  • deps-dev: bump typescript (4ea88eb)
  • deps: bump github/combine-prs from 5.1.0 to 5.2.0 (e6a7b43)
  • deps: bump sonarsource/sonarcloud-github-action (6855943)
  • deps: bump the major group across 3 directories with 2 updates (e990af6)
  • deps: bump the regular group across 11 directories with 1 update (a721023)
  • deps: bump the regular group across 3 directories with 1 update (29ed11a)

4.2.11 (2024-09-12)

⚡ Performance

  • track dynamic pool empty event lifecycle (7923fe5)

✨ Polish

  • add dynamic worker nodes count to pool info (01277ce)

🧪 Tests

  • refine dynamic pool shutdown test expectations (fc43a51)

📚 Documentation

🤖 Automation

  • deps-dev: bump sinon from 18.0.0 to 18.0.1 in the regular group (947d358)
  • deps-dev: bump the regular group with 2 updates (efd5d49)
  • deps: bump the regular group across 11 directories with 1 update (#2568) (678986c)
  • deps: bump the regular group across 3 directories with 1 update (7e6cc27)

4.2.10 (2024-09-06)

⚡ Performance

  • optimize backpressure task(s) stealing conditions (9df97af)

✨ Polish

  • add isWorkerNodeStealing() helper (febcf8e)
  • factor out stealing ratio conditions check into an helper (207df8a)

🧪 Tests

  • cleanup error handling expectations (d960e54)

📚 Documentation

  • add mapExecute implementation to fastify examples plugin (3924d83)
  • add missing mapExecute type definition to fastify examples (83572f4)
  • code cleanup in examples (24bc951)
  • publish documentation (d3a3b16)
  • switch to mapExecute() in examples (8162986)

🤖 Automation

  • deps-dev: bump @types/node in the regular group (fb8923f)
  • deps-dev: bump the regular group across 11 directories with 1 update (8ae78fb)
  • deps-dev: bump the regular group across 11 directories with 1 update (4a2b738)
  • deps-dev: bump the regular group with 2 updates (b1b652f)
  • deps: bump nodemailer (552013f)
  • deps: bump the regular group across 11 directories with 2 updates (302fa26)
  • deps: bump the regular group across 11 directories with 2 updates (#2557) (eb97198)

4.2.9 (2024-08-30)

🐞 Bug Fixes

  • handle properly small or zero tasksStealingRatio (e45f621)

📚 Documentation

4.2.8 (2024-08-30)

🐞 Bug Fixes

  • fix dynamic thread pool full event emission rate (52021de)

✨ Polish

  • move dynamic pool only getters to its own class (21e6b0e)

🧪 Tests

  • refine pool event tests expectation (6a30766)

📚 Documentation

  • publish documentation (bc407dc)
  • README.md: fix worker example export (a5844a0)
  • README.md: use top level await syntax in example (3b4d090)
  • refine pool ready event emission condition (3abc7fe)

🤖 Automation

  • deps-dev: bump the regular group with 3 updates (d707c4d)
  • deps: bump the regular group across 11 directories with 2 updates (5c2e6e8)

4.2.7 (2024-08-28)

⚡ Performance

  • reduce useless branching at pool info building (4a29667)
  • track dynamic pool full lifecycle via events (5f9e905)

✨ Polish

  • cleanup pool information ordering (ba443f4)
  • merge dynamic pool events emission code (e6cf2a9)

🧪 Tests

  • improve pool empty event test (4b91b77)

📚 Documentation

🤖 Automation

  • deps-dev: bump eslint-plugin-perfectionist from 3.2.0 to 3.3.0 in the regular group (#2549) (60b5fab)
  • deps: bump the regular group across 11 directories with 1 update (#2550) (7cfe89c)

4.2.6 (2024-08-27)

🐞 Bug Fixes

  • fix pool back pressure semantic on dynamic pool (227e9e9)

⚡ Performance

  • track pool back pressure lifecycle via events (303c0db)
  • track pool busy lifecycle via events (f8a57da)

✨ Polish

  • cleanup worker node back pressure checks (697d8c6)

📚 Documentation

🤖 Automation

  • deps-dev: bump the regular group with 2 updates (46c6476)
  • deps: bump the regular group across 11 directories with 2 updates (43922bf)

4.2.5 (2024-08-26)

🐞 Bug Fixes

  • ensure no deleted dynamic worker can be used to steal task(s) (60ff5f0)

✨ Polish

  • cleanup worker node back pressure detection implementation (6546b6a)
  • cleanup worker node state conditions check (2a8bfdf)

📚 Documentation

4.2.4 (2024-08-24)

🐞 Bug Fixes

  • fix pool ready status with zero min size dynamic pool (e48fa7a)

✨ Polish

  • switch to eslint-plugin-perfectionist (9723108)

🧪 Tests

  • add pool empty event test (7682c56)
  • optimize pool empty event test (fa97876)

📚 Documentation

🤖 Automation

  • deps-dev: bump husky from 9.1.4 to 9.1.5 in the regular group (#2538) (d25e4f5)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2539) (dd24a54)
  • deps-dev: bump the regular group with 2 updates (205d209)
  • deps: bump sonarsource/sonarcloud-github-action (#2537) (82e0653)
  • deps: bump the regular group across 11 directories with 3 updates (#2536) (b901726)
  • deps: bump the regular group across 7 directories with 2 updates (e559d2d)

4.2.3 (2024-08-19)

🐞 Bug Fixes

  • account for all stealing worker nodes (d967235)

✨ Polish

  • define a variable only when needed (4f28c7a)
  • display back pressured worker nodes in pool info (8c7a518)

📚 Documentation

🤖 Automation

  • deps-dev: apply updates (5a96b64)
  • deps-dev: bump @types/node in the regular group (#2533) (b2cd95b)
  • deps-dev: bump eslint-plugin-jsdoc in the regular group (d20645f)
  • deps-dev: bump the regular group across 11 directories with 1 update (#2534) (a9c233d)
  • deps: bump the regular group across 11 directories with 2 updates (c657b5d)

4.2.2 (2024-08-14)

🐞 Bug Fixes

  • fix race condition at task response handling during pool destroy (b28533a)
  • workaround race conditions at pool destroy (684f132)

📚 Documentation

4.2.1 (2024-08-14)

🐞 Bug Fixes

  • ensure task stealing can't start twice on the same worker node (37cc14e)
  • trigger continuous tasks stealing under proper conditions (2663563)

✨ Polish

  • remove unneeded condition at task response handling (93df097)

📚 Documentation

  • publish documentation (b4f9421)
  • refine code comment about task stealing conditions (80716e5)

🤖 Automation

  • deps-dev: bump eslint-plugin-jsdoc in the regular group (#2525) (b9873cb)
  • deps: bump the regular group across 11 directories with 2 updates (#2526) (d3167a7)

4.2.0 (2024-08-13)

🚀 Features

  • reenable tasks stealing under back pressure by default (f09b195)

🐞 Bug Fixes

  • protect worker node tasks queue from concurrent tasks stealing (eebfd81)

⚡ Performance

  • do mapExecute() args sanity checks once (390300c)

✨ Polish

  • cleanup eslint configuration (d5f06e4)
  • cleanup worker condition checks at task stealing (d52d477)

🧪 Tests

  • cleanup fixed pool tests setup and teardown (311c5bd)
  • cleanup resources setup and teardown (e1e0cb2)
  • remove duplicate tests (55a9fbc)

📚 Documentation

  • add documentation on enablePrority priority queue getter/setter (3e53cc1)
  • api: add missing tasksStealingRatio default value (5b65da9)
  • publish documentation (e57792c)

🤖 Automation

  • ci: reenabled code auto formatting and linting (31e5cb9)
  • ci: silence linter on examples (6a2f448)
  • deps-dev: bump @commitlint/cli in the regular group (#2518) (798d464)
  • deps-dev: bump @cspell/eslint-plugin from 8.11.0 to 8.12.1 (cb4a4fd)
  • deps-dev: bump @cspell/eslint-plugin from 8.12.1 to 8.13.0 (#2490) (d94680b)
  • deps-dev: bump @cspell/eslint-plugin from 8.13.0 to 8.13.1 (f4b46c2)
  • deps-dev: bump @types/node (898fb96)
  • deps-dev: bump @types/node (b83105c)
  • deps-dev: bump @types/node (30ccf3b)
  • deps-dev: bump @types/node (72e99f3)
  • deps-dev: bump @types/node (6032c66)
  • deps-dev: bump @types/node (90a355a)
  • deps-dev: bump @types/node (dc72c1f)
  • deps-dev: bump @types/node (9072888)
  • deps-dev: bump @types/node (4001e8f)
  • deps-dev: bump @types/node (4b3f7ff)
  • deps-dev: bump @types/node (bffa27b)
  • deps-dev: bump @types/node (51b8676)
  • deps-dev: bump @types/node (84e2af2)
  • deps-dev: bump @types/node from 20.14.11 to 20.14.12 (#2484) (b04790a)
  • deps-dev: bump @types/node from 22.0.2 to 22.1.0 (e2c63d9)
  • deps-dev: bump eslint-plugin-jsdoc from 48.10.2 to 48.11.0 (a335dbb)
  • deps-dev: bump eslint-plugin-jsdoc from 48.9.2 to 48.10.2 (#2489) (7740dd2)
  • deps-dev: bump eslint-plugin-jsdoc in the major group (#2519) (97be5ef)
  • deps-dev: bump husky from 9.1.2 to 9.1.3 (#2487) (788cee8)
  • deps-dev: bump rollup (cc75e8e)
  • deps-dev: bump rollup (b802739)
  • deps-dev: bump rollup (1d82f1e)
  • deps-dev: bump rollup (18ccae8)
  • deps-dev: bump rollup (e45d209)
  • deps-dev: bump rollup (865b4f5)
  • deps-dev: bump rollup from 4.19.1 to 4.19.2 (caf6fe3)
  • deps-dev: bump the regular group with 2 updates (#2523) (cc9a0fb)
  • deps-dev: bump typedoc from 0.26.4 to 0.26.5 (27433e0)
  • deps-dev: update eslint-plugin-jsdoc to 50.2.0 (25bf98e)
  • deps: bump axios in /examples/typescript/http-client-pool (#2501) (9c8c7b6)
  • deps: bump github/combine-prs from 5.0.0 to 5.1.0 (#2476) (9c14720)

4.1.0 (2024-07-18)

🚀 Features

  • add ratio of worker nodes in a pool allowed to perform concurrent tasks stealing (e25f86b), closes #2284

✨ Polish

  • npx -> pnpm dlx where appropriates (21b76dc)

🧪 Tests

  • fix error type expectation (16196bc)

📚 Documentation

  • api.md: add missing ToC entry (989a71a)
  • api.md: document tasksStealingRatio tasks queue option (453c646)
  • publish documentation (082fb4d)

🤖 Automation

  • deps-dev: bump @cspell/eslint-plugin from 8.10.4 to 8.11.0 (ae8cecf)
  • deps-dev: bump @types/node (e1436e8)
  • deps-dev: bump husky from 9.0.11 to 9.1.0 (#2474) (8b770d2)
  • deps-dev: bump prettier from 3.3.2 to 3.3.3 (#2469) (ed09ef1)
  • deps-dev: bump tatami-ng from 0.5.1 to 0.5.3 (27ddec8)
  • deps: bump poolifier (01afcb2)
  • deps: bump poolifier (f49f67f)
  • deps: bump poolifier (ac181f4)
  • deps: bump poolifier (966953d)
  • deps: bump poolifier (d67aa39)
  • deps: bump poolifier (4763e8c)
  • deps: bump poolifier (69b9ebc)
  • deps: bump poolifier (37645d7)
  • deps: bump poolifier (c63416f)
  • deps: bump poolifier in /examples/typescript/http-client-pool (d96a9d3)
  • deps: bump poolifier in /examples/typescript/smtp-client-pool (af1cc0e)

4.0.18 (2024-07-11)

🐞 Bug Fixes

  • null exception when a task errored (ac5ee55)

✨ Polish

  • priority-queue: cleanup intermediate variables namespace (bb5d86b)

🧪 Tests

  • improve WorkerNode init coverage (bcac180)

📚 Documentation

  • fix CHANGELOG.md formatting (1823a63)
  • flag WorkerChoiceStrategiesContext class as internal (9eacd2e)
  • publish documentation (62d0f6f)

🤖 Automation

  • deps-dev: bump tatami-ng from 0.4.16 to 0.5.1 (#2453) (d7b4ed8)

4.0.17 (2024-07-07)

⚡ Performance

  • optimize tasks queuing implementation (097dea6)

✨ Polish

  • factor out fixed queue common code in an abstract class (840270a)
  • format code (9183b88)
  • move queueing code into its own directory (c6dd1ae)
  • refine queue full error message (9008a96)
  • remove duplicate code in fixed-queue.ts (7a1c77f)

📚 Documentation

🤖 Automation

  • ci: fix automated documentation publication at releasing (147c01e)
  • deps-dev: bump @cspell/eslint-plugin from 8.10.1 to 8.10.2 (4f10a83)
  • deps-dev: bump @types/node (1d24d0e)
  • deps-dev: bump @types/node (ffa4f4f)
  • deps-dev: bump @types/node (1fe2514)
  • deps-dev: bump @types/node (e90a256)
  • deps-dev: bump @types/node (0bf1a17)
  • deps-dev: bump @types/node (dd73d0c)
  • deps-dev: bump @types/node (2be2259)
  • deps-dev: bump @types/node (828a2e0)
  • deps-dev: bump @types/node (7109e5b)
  • deps-dev: bump @types/node (6f81d57)
  • deps-dev: bump @types/node (dc6b47a)
  • deps-dev: bump @types/node from 20.14.9 to 20.14.10 (4c07331)
  • deps: bump poolifier (9b11cba)
  • deps: bump poolifier (4c39d13)
  • deps: bump poolifier (b0ad3bc)
  • deps: bump poolifier (aa6ea2c)
  • deps: bump poolifier (ec4d611)
  • deps: bump poolifier (cc4e9f0)
  • deps: bump poolifier (6e1b4de)
  • deps: bump poolifier (8e21198)
  • deps: bump poolifier in /examples/typescript/http-client-pool (7961830)
  • deps: bump poolifier in /examples/typescript/smtp-client-pool (475dc40)

4.0.16 (2024-07-05)

📚 Documentation

✨ Polish

🤖 Automation

  • ci: add autofix GH action (14b39b9)
  • ci: do not cancel workflow in case of autofix failure (177dbab)
  • ci: fix autofix GH action (e3a9678)
  • ci: fix autofix GH action (0b7cbf7)
  • ci: fix eslint configuration (c5d7f73)
  • ci: publish documentation at release (3a83d94)
  • ci: refine autofix GH action (8b7aa42)
  • ci: refine autofix GH action (8ab143b)
  • ci: switch to release-please release manager (4c7e68a)
  • deps-dev: apply updates (5c48a85)
  • deps-dev: apply updates (f94bb23)
  • deps-dev: apply updates (1e98512)
  • deps-dev: apply updates (aaceda9)
  • deps-dev: apply updates (3dcc95e)
  • deps-dev: apply updates (0aa0016)
  • deps-dev: apply updates (dea4237)
  • deps-dev: apply updates (e06ce0e)
  • deps-dev: apply updates (80605a6)
  • deps-dev: apply updates (3b594fe)
  • deps-dev: apply updates (df01d9a)
  • deps-dev: apply updates (a1b4a65)
  • deps-dev: apply updates (31a42de)
  • deps-dev: bump @cspell/eslint-plugin from 8.9.0 to 8.9.1 (0b4d6a4)
  • deps-dev: bump eslint-plugin-jsdoc from 48.2.13 to 48.4.0 (195a874)
  • deps-dev: bump mocha from 10.4.0 to 10.5.0 (b1b2093)
  • deps-dev: bump mocha from 10.5.1 to 10.5.2 (a4d1195)
  • deps-dev: bump neostandard from 0.7.2 to 0.8.0 (7344812)
  • deps-dev: bump typedoc from 0.26.0 to 0.26.2 (8004ea7)
  • deps-dev: bump typescript (fca1e52)
  • deps-dev: bump typescript (345d416)
  • deps-dev: bump typescript (3aa8d66)
  • deps-dev: bump typescript (8837306)
  • deps-dev: bump typescript (0b79799)
  • deps-dev: bump typescript (995d429)
  • deps-dev: bump typescript (2905914)
  • deps-dev: bump typescript (f2c2f1b)
  • deps-dev: bump typescript (37b0774)
  • deps-dev: bump typescript (f4a2509)
  • deps-dev: bump typescript (97bb99a)
  • deps: bump poolifier (5d5410e)
  • deps: bump poolifier (177e46b)
  • deps: bump poolifier (580433b)
  • deps: bump poolifier (a0583d4)
  • deps: bump poolifier (161136f)
  • deps: bump poolifier (70075ce)
  • deps: bump poolifier (d74c068)
  • deps: bump poolifier (b8e4e7d)
  • deps: bump poolifier (239d223)
  • deps: bump poolifier in /examples/typescript/http-client-pool (1e6c12d)
  • deps: bump poolifier in /examples/typescript/smtp-client-pool (4c29535)
  • deps: bump ws (5ae7d26)
  • deps: bump ws (5fea98e)
  • deps: bump ws (cf6f83d)

[4.0.15] - 2024-06-20

Fixed

  • Fix priority queue dequeue() from the last prioritized bucket.

[4.0.14] - 2024-06-12

Changed

  • Add mapExecute() helper to execute a task function on an iterable data's input.

[4.0.13] - 2024-05-29

Changed

  • Optimize tasks queue implementation.
  • Enable prioritized tasks queueing only when necessary.

[4.0.12] - 2024-05-25

Changed

  • Optimize circular buffer implementation to store task execution measurements.

[4.0.11] - 2024-05-21

Changed

  • Switch to optimized circular buffer implementation to store task execution measurements.

[4.0.10] - 2024-05-20

Fixed

  • Ensure tasks stealing dynamic worker node is not destroyed on inactivity.

[4.0.9] - 2024-05-19

Changed

  • Add ELU utilization statistics to pool information.

[4.0.8] - 2024-05-15

Fixed

  • Fix default task function worker choice strategy and priority handling.

[4.0.7] - 2024-05-13

Changed

  • Add ELU statistics to pool information.

[4.0.6] - 2024-05-10

Fixed

  • Fix pools' addTaskFunction() type definition.

[4.0.5] - 2024-05-09

Fixed

  • Avoid queued tasks redistribution on the errored worker node.

[4.0.4] - 2024-05-08

Fixed

  • Disable tasksStealingOnBackPressure by default until performance issues under heavy load are sorted out.

[4.0.3] - 2024-05-08

Changed

  • Optimize task(s) stealing by dequeuing task(s) from the last prioritized bucket.

[4.0.2] - 2024-05-06

Fixed

  • Ensure poolifier worker task performance measurement requirements are synchronized with task function objects' worker choice strategies.

[4.0.1] - 2024-05-02

Fixed

  • Ensure dynamic worker node are initialized with sensible worker node usage default values to avoid worker choice strategies biased decisions.
  • Account for tasks wait time in task execution time computation in worker choice strategies to avoid biased decisions under load with several prioritized task functions and tasks queue enabled.

[4.0.0] - 2024-04-30

Changed

  • Support per task function(s) priority and worker choice strategy definition via a task function object: { taskFunction: (data?: Data) => Response | Promise<Response>, priority?: number, strategy?: WorkerChoiceStrategy }.
  • Add priority queue based tasks queueing. One priority queue is divided into prioritized buckets to avoid queued tasks starvation under load.
  • BREAKING CHANGE: listTaskFunctionNames() to listTaskFunctionsProperties() in pool and worker API returning registered task functions properties.
  • BREAKING CHANGE: strategy field in pool information renamed to defaultStrategy.

Fixed

  • Ensure worker choice strategy options changes at runtime are propagated to poolifier workers.

[3.1.30] - 2024-04-22

Fixed

  • Fix transferList argument type definition.

[3.1.29] - 2024-04-02

Fixed

  • Fix possible race condition at worker node recreation on worker error and exit events.

[3.1.28] - 2024-04-01

Fixed

  • Ensure the minimum number of workers on a started pool is guaranteed.

[3.1.27] - 2024-03-27

Fixed

  • Fix publishing on JSR, take 4.

[3.1.26] - 2024-03-27

Fixed

  • Fix publishing on JSR, take 3.

[3.1.25] - 2024-03-27

Fixed

  • Fix publishing on JSR, take 2.

[3.1.24] - 2024-03-27

Fixed

  • Fix publishing on JSR.

[3.1.23] - 2024-03-27

Changed

  • Publish on JSR.

[3.1.22] - 2024-03-15

Fixed

  • Fix pool event emitter registered callbacks removal at destroy().

[3.1.21] - 2024-02-22

Fixed

  • Fix null exception regression: #1496.

[3.1.20] - 2024-02-11

Fixed

  • Ensure worker_threads workers are unreferenced at termination.

[3.1.19] - 2024-01-16

Fixed

  • Fix possible null exception at task finishing handling.

Changed

  • Optimize Deque implementation to improve tasks queueing performance.

[3.1.18] - 2024-01-06

Fixed

  • Fix dynamic pool with minimum number of workers set to zero: #1748.

[3.1.17] - 2024-01-05

Changed

  • Improve performance by clean up unneeded condition checks on hot code paths.

[3.1.16] - 2024-01-03

Fixed

  • Add missing type to TS type definitions.

[3.1.15] - 2024-01-02

Fixed

  • Fix CommonJS support with TypeScript: #1821.

[3.1.15-0] - 2024-01-02

Fixed

  • Fix CommonJS support with TypeScript: #1821.

[3.1.14] - 2024-01-01

Fixed

  • Properly handle dynamic pool with zero minimum size.

[3.1.13] - 2023-12-30

Changed

  • Reduce branching in several hot code paths.
  • Use faster object cloning implementation.

[3.1.12] - 2023-12-27

Fixed

  • Fix tasks redistribution triggers at pool destroying.

Changed

  • Switch TypeScript module resolution to Node16.

[3.1.12-0] - 2023-12-27

Fixed

  • Fix tasks redistribution triggers at pool destroying.

[3.1.11] - 2023-12-24

Fixed

  • Avoid worker node cross tasks stealing.
  • Ensure only half the pool worker nodes can steal tasks.

[3.1.10] - 2023-12-23

Changed

  • Avoid useless branching on pool type.

[3.1.9] - 2023-12-22

Changed

  • Readd ThreadPoolOptions and ClusterPoolOptions TS type aliases to PoolOptions.

[3.1.8] - 2023-12-21

Fixed

  • Fix default worker weight computation.
  • Fix possible null exception at pool destroying.

[3.1.7] - 2023-12-20

Fixed

  • Ensure worker choice strategies implementation wait for worker node readiness: #1748.

[3.1.6] - 2023-12-18

Fixed

  • Fix pool destroying with tasks queuing enabled.

[3.1.5] - 2023-12-18

Added

  • Add queued tasks end timeout support to worker node termination.

[3.1.4] - 2023-12-18

Fixed

  • Make more robust the fix for possible null exception at handling task execution response.

[3.1.3] - 2023-12-17

Fixed

  • Fix possible null exception at handling task execution response.

[3.1.2] - 2023-12-17

Fixed

  • Wait for queued tasks to end at worker node termination.

[3.1.1] - 2023-12-16

Fixed

  • Fix pool options TS type definition.

[3.1.0] - 2023-12-16

Changed

  • TypeScript breaking change: merge ThreadPoolOptions and ClusterPoolOptions types into PoolOptions type.

[3.0.14] - 2023-12-13

Fixed

  • Fix possible null exception with worker_threads pools.

[3.0.13] - 2023-12-12

Fixed

  • Ensure worker choice strategy wait for worker nodes readiness.

Changed

  • Remove infinite retries support in worker choice strategy to avoid configuration leading to possible infinite recursion or loop.

[3.0.12] - 2023-12-12

Changed

  • Add infinite retries support in worker choice strategy.

[3.0.11] - 2023-12-11

Fixed

  • Ensure pool asynchronous resource properly track tasks execution.

[3.0.10] - 2023-12-08

Changed

  • Add a fastpath when tasks stealing or redistribution is impossible.

[3.0.9] - 2023-11-26

Fixed

  • Remove all pool events listener at pool destroying.
  • Remove all worker node events listener at worker node destroying.
  • Fix worker node event emitter listeners handling memory leak at pool options runtime change.

[3.0.8] - 2023-11-25

Fixed

  • Ensure continuous tasks stealing on idle start at worker node idling.

[3.0.7] - 2023-11-24

Changed

  • Make continuous tasks stealing start at worker node idling.

[3.0.6] - 2023-11-24

Fixed

  • Ensure pool statuses are checked at initialization, start() or destroy().
  • Ensure pool ready event can be emitted after several start()/destroy() cycles.

[3.0.5] - 2023-10-27

Fixed

  • Ensure pool ready event can be emitted only once.

[3.0.4] - 2023-10-20

Changed

[3.0.3] - 2023-10-19

Fixed

  • Avoid null exception at sending message to worker.
  • Avoid null exception at checking worker node readiness.

[3.0.2] - 2023-10-17

Fixed

  • Fix race condition at dynamic worker node task assignment and scheduled removal. See issue #1468 and #1496.

[3.0.1] - 2023-10-16

Fixed

  • Workaround possible race condition at work nodes array element removal and querying. See issue #1468.

Changed

  • Switch the worker node eventing code to EventTarget API.

[3.0.0] - 2023-10-08

Changed

  • Remove Node.js 16.x.x (EOL) support.

[2.7.5] - 2023-10-03

Changed

  • Use EventEmitterAsyncResource type from @types/node for pool event emitter. TypeScript users will need to update to latest @types/node version.

[2.7.4] - 2023-09-25

Fixed

  • Fix source maps (bundler issue).

[2.7.3] - 2023-09-24

Changed

  • Convert pool event emitter to event emitter async resource.

[2.7.2] - 2023-09-23

Changed

  • Add source maps to npm package to ease debugging.

Added

[2.7.1] - 2023-09-20

Fixed

  • Ensure worker message listener used one time are removed after usage.

[2.7.0] - 2023-09-19

Fixed

  • Fix task stealing related tasks queue options handling at runtime.

Changed

  • Rename listTaskFunctions() to listTaskFunctionNames() in pool and worker API.

Added

  • Add hasTaskFunction(), addTaskFunction(), removeTaskFunction(), setDefaultTaskFunction() methods to pool API: PR #1148.
  • Stricter worker constructor arguments validation.

[2.6.45] - 2023-09-17

Changed

  • Disable publication on GitHub packages registry on release until authentication issue is fixed.

Added

  • Add startWorkers to pool options to whether start the minimum number of workers at pool initialization or not.
  • Add start() method to pool API to start the minimum number of workers.
  • Add taskStealing and tasksStealingOnBackPressure to tasks queue options to whether enable task stealing or not and whether enable tasks stealing under back pressure or not.
  • Continuous internal benchmarking: https://poolifier.github.io/benchmark-results/dev/bench.

[2.6.44] - 2023-09-08

Fixed

  • Use a dedicated PAT to publish on GitHub packages registry.

Added

  • Publish on GitHub packages registry on release.

Changed

[2.6.43] - 2023-09-08

Added

  • Publish on GitHub packages registry on release.

Changed

[2.6.42] - 2023-09-06

Changed

  • Optimize hot code paths implementation: avoid unnecessary branching, add and use optimized helpers (min, max), use reduce() array helper, ...

[2.6.41] - 2023-09-03

Changed

  • Optimize worker choice strategies implementation.

[2.6.40] - 2023-09-01

Fixed

  • Do not pre-choose in WRR worker choice strategy to avoid bias.
  • Avoid array out of bound in worker choice strategies after worker node removal.

[2.6.39] - 2023-08-30

Fixed

  • Fix race condition in worker choice strategies at worker node info querying while not yet initialized.

[2.6.38] - 2023-08-30

Added

  • Bundle typescript types declaration into one file.

Changed

  • Improve interleaved weighted round robin worker choice strategy implementation.

[2.6.37] - 2023-08-28

Fixed

  • Ensure unused worker usage statistics are deleted at runtime.

Changed

  • Rename worker choice strategy options choiceRetries to retries.
  • Avoid unnecessary branching in worker choice strategies.

[2.6.36] - 2023-08-27

Fixed

  • Fix pool execute() arguments check.

Changed

  • Make continuous tasks stealing algorithm less aggressive.
  • Fine tune tasks stealing algorithm under back pressure.

[2.6.35] - 2023-08-25

Fixed

  • Don't account worker usage statistics for tasks that have failed.
  • Fix pool information runtime and wait time median computation.

Changed

  • Update simple moving average implementation to use a circular buffer.
  • Update simple moving median implementation to use a circular buffer.
  • Account for stolen tasks in worker usage statistics and pool information.

Added

  • Continuous tasks stealing algorithm.

[2.6.34] - 2023-08-24

Fixes

  • Avoid cascading tasks stealing under back pressure.

Changed

  • Add fastpath to queued tasks rescheduling.

[2.6.33] - 2023-08-24

Fixed

  • Fix queued tasks rescheduling.

Changed

  • Rename tasks queue options queueMaxSize to size.

Added

  • Task stealing scheduling algorithm if tasks queueing is enabled.

[2.6.32] - 2023-08-23

Fixed

  • Ensure no task can be executed when the pool is destroyed.

Added

  • Add queueMaxSize option to tasks queue options.
  • Add O(1) deque implementation implemented with doubly linked list and use it for tasks queueing.
  • Add tasks stealing algorithm when a worker node queue is back pressured if tasks queueing is enabled.

[2.6.31] - 2023-08-20

Fixed

  • Fix worker choice strategy retries mechanism in some edge cases.

Changed

  • Make orthogonal worker choice strategies tasks distribution and created dynamic worker usage.
  • Remove the experimental status of the LEAST_ELU worker choice strategy.

[2.6.30] - 2023-08-19

Fixed

  • Ensure pool event backPressure is emitted.
  • Ensure pool event full is emitted only once.
  • Ensure worker node cannot be instantiated without proper arguments.

[2.6.29] - 2023-08-18

Fixed

  • Fix race condition between readiness and task functions worker message handling at startup.
  • Fix duplicate task function worker usage statistics computation per task function.
  • Update task function worker usage statistics if and only if there's at least two different task functions.
  • Fix race condition at task function worker usage executing task computation leading to negative value.

Added

  • Add back pressure detection on the worker node queue. Event backPressure is emitted when all worker node queues are full (worker node queue size >= poolMaxSize^2).
  • Use back pressure detection in worker choice strategies.
  • Add worker choice strategies retries mechanism if no worker is eligible.

[2.6.28] - 2023-08-16

Fixed

  • Ensure pool workers are properly initialized.

Added

  • HTTP server pool examples: express-cluster, express-hybrid.

Changed

  • Remove now useless branching in worker hot code path.

[2.6.27] - 2023-08-15

Fixed

  • Add KillHandler type definition to exported types.

Added

  • Add destroy event to pool API.

[2.6.26] - 2023-08-15

Added

  • Add kill handler to worker options allowing to execute custom code when worker is killed.
  • Add listTaskFunctions() method to pool API.
  • SMTP client pool example: nodemailer.

[2.6.25] - 2023-08-13

Added

  • HTTP server pool examples: fastify-cluster, fastify-hybrid.
  • WebSocket server pool examples: ws-cluster, ws-hybrid.

[2.6.24] - 2023-08-12

Added

  • Add array of transferable objects to the execute() method arguments.
  • WebSocket server pool examples: ws-worker_threads.

[2.6.23] - 2023-08-11

Fixed

  • Fix pool busyness semantic when tasks queueing is enabled: the pool is busy when the number of executing tasks on each worker has reached the maximum tasks concurrency per worker.

Added

  • HTTP client pool examples: fetch, node-fetch and axios with multiple task functions.
  • HTTP server pool examples: express-worker_threads, fastify-worker_threads.

[2.6.22] - 2023-08-10

Fixed

  • Add missing types field to package.json exports.

Changed

  • Structure markdown documentation (PR #811).

[2.6.21] - 2023-08-03

Changed

  • Improve code documentation.
  • Code refactoring and cleanup for better maintainability and readability.

[2.6.20] - 2023-07-21

Fixed

  • Fix queued tasks redistribution on error task execution starvation.
  • Ensure tasks queueing per worker condition is untangled from the pool busyness semantic.

Changed

  • Drastically reduce lookups by worker in the worker nodes.

[2.6.19] - 2023-07-20

Added

  • Dedicated internal communication channel for worker_threads pools.

[2.6.18] - 2023-07-19

Changed

  • Code refactoring and cleanup for better maintainability and readability. Bundle size is a bit smaller.

[2.6.17] - 2023-07-16

Added

  • Add listTaskFunctions() method to worker API.

[2.6.16] - 2023-07-12

Fixed

  • Fix pool startup detection.
  • Fix worker task functions handling.

[2.6.15] - 2023-07-11

Added

  • Take into account worker node readiness in worker choice strategies.

[2.6.14] - 2023-07-10

Fixed

  • Fix task function statistics tracking.

[2.6.13] - 2023-07-10

Added

  • Add per task function statistics tracking.
  • Add public methods to manipulate the worker task functions at runtime.

[2.6.12] - 2023-07-09

Fixed

  • Workaround import issue with node:os module in node 16.x.x.

[2.6.11] - 2023-07-09

Fixed

  • Fix pool readiness semantic.

[2.6.10] - 2023-07-08

Fixed

  • Ensure workers are not recreated on error at pool startup.

Added

  • Add ready and strategy fields to pool information.
  • Add pool event ready to notify when the number of workers created in the pool has reached the maximum size expected and are ready.
  • Add dynamic pool sizing checks.

[2.6.9] - 2023-07-07

Fixed

  • Recreate the right worker type on uncaught exception.

Added

  • Add minimum and maximum to internal measurement statistics.
  • Add runTime and waitTime to pool information.
  • Check worker inactive time only on dynamic worker.

[2.6.8] - 2023-07-03

Fixed

  • Brown paper bag release to fix version handling in pool information.

[2.6.7] - 2023-07-03

Fixed

  • Ensure worker queued tasks at error are reassigned to other pool workers.

Added

  • Add pool utilization ratio to pool information.
  • Add version to pool information.
  • Add worker information to worker nodes.

[2.6.6] - 2023-07-01

Added

  • Add safe helper availableParallelism() to help sizing the pool.

Fixed

  • Ensure message handler is only registered in worker.

[2.6.5] - 2023-06-27

Known issues

Fixed

  • Artificial version bump to 2.6.5 to workaround publication issue.
  • Ensure cluster pool destroy() gracefully shutdowns worker's server.
  • Ensure pool event is emitted before task error promise rejection.
  • Fix queued tasks count computation.

Removed

  • Remove unneeded worker_threads worker MessageChannel internal usage for IPC.

[2.6.4] - 2023-06-27

Known issues

Fixed

  • Ensure cluster pool destroy() gracefully shutdowns worker's server.
  • Ensure pool event is emitted before task error promise rejection.
  • Fix queued tasks count computation.

Removed

  • Remove unneeded worker_threads worker MessageChannel internal usage for IPC.

[2.6.3] - 2023-06-19

Fixed

  • Ensure no tasks are queued when trying to soft kill a dynamic worker.
  • Update strategies internals after statistics computation.

Changed

  • Optimize O(1) queue implementation.

[2.6.2] - 2023-06-12

Fixed

  • Fix new worker use after creation in dynamic pool given the current worker choice strategy.

[2.6.1] - 2023-06-10

Added

  • Add worker choice strategy documentation: README.md.

Fixed

  • Fix average statistics computation: ensure failed tasks are not accounted.

[2.6.0] - 2023-06-09

Added

  • Add LEAST_ELU worker choice strategy (experimental).
  • Add tasks ELU instead of runtime support to FAIR_SHARE worker choice strategy.

Changed

  • Refactor pool worker node usage internals.
  • Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed.
  • Breaking change: pool information info property object fields have been renamed.

Fixed

  • Fix wait time accounting.
  • Ensure worker choice strategy LEAST_BUSY accounts also tasks wait time.
  • Ensure worker choice strategy LEAST_USED accounts also queued tasks.

[2.5.4] - 2023-06-07

Added

  • Add Event Loop Utilization (ELU) statistics to worker tasks usage.

Changed

  • Compute statistics at the worker level only if needed.
  • Add worker_threads options to thread pool options.

Fixed

  • Make the LEAST_BUSY strategy only relies on task runtime.

[2.5.3] - 2023-06-04

Changed

  • Refine pool information content.
  • Limit pool internals public exposure.

[2.5.2] - 2023-06-02

Added

  • Add taskError pool event for task execution error.
  • Add pool information info property to pool.
  • Emit pool information on busy and full pool events.

[2.5.1] - 2023-06-01

Added

  • Add pool option restartWorkerOnError to restart worker on uncaught error. Default to true.
  • Add error pool event for uncaught worker error.

[2.5.0] - 2023-05-31

Added

  • Switch pool event emitter to EventEmitterAsyncResource.
  • Add tasks wait time accounting in per worker tasks usage.
  • Add interleaved weighted round robin INTERLEAVED_WEIGHTED_ROUND_ROBIN worker choice strategy (experimental).

Changed

  • Renamed worker choice strategy LESS_BUSY to LEAST_BUSY and LESS_USED to LEAST_USED.

[2.4.14] - 2023-05-09

Fixed

  • Ensure no undefined task runtime can land in the tasks history.
  • Fix median computation implementation once again.

Added

  • Unit tests for median and queue implementations.

[2.4.13] - 2023-05-08

Fixed

  • Fix worker choice strategy options validation.
  • Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.

[2.4.12] - 2023-05-06

Added

  • Support multiple task functions per worker.
  • Add custom worker weights support to worker choice strategies options.

Changed

  • Use O(1) queue implementation for tasks queueing.

Fixed

  • Fix median computation implementation.
  • Fix fair share worker choice strategy internals update.

[2.4.11] - 2023-04-23

Changed

  • Optimize free worker finding in worker choice strategies.

[2.4.10] - 2023-04-15

Fixed

  • Fix typescript type definition for task function: ensure the input data is optional.
  • Fix typescript type definition for pool execute(): ensure the input data is optional.

[2.4.9] - 2023-04-15

Added

  • Add tasks queue enablement runtime setter to pool.
  • Add tasks queue options runtime setter to pool.
  • Add worker choice strategy options runtime setter to pool.

Changed

  • Remove the tasks queuing experimental status.

Fixed

  • Fix task function type definition and validation.
  • Fix worker choice strategy options handling.

[2.4.8] - 2023-04-12

Fixed

  • Fix message between main worker and worker type definition for tasks.
  • Fix code documentation.

[2.4.7] - 2023-04-11

Added

  • Add worker tasks queue options to pool options.

Fixed

  • Fix missing documentation.

[2.4.6] - 2023-04-10

Fixed

  • Ensure one task at a time is executed per worker with tasks queueing enabled.
  • Properly count worker executing tasks with tasks queueing enabled.

[2.4.5] - 2023-04-09

Added

  • Use monotonic high resolution timer for worker tasks runtime.
  • Add worker tasks median runtime to statistics.
  • Add worker tasks queue (experimental).

[2.4.4] - 2023-04-07

Added

  • Add PoolEvents enumeration and PoolEvent type.

Fixed

  • Destroy worker only on alive check.

[2.4.3] - 2023-04-07

Fixed

  • Fix typedoc generation with inheritance.

[2.4.2] - 2023-04-06

Added

  • Add full event to dynamic pool.
  • Keep worker choice strategy in memory for conditional reuse.

Fixed

  • Fix possible negative worker key at worker removal in worker choice strategies.

[2.4.1] - 2023-04-05

Changed

  • Optimize worker choice strategy for dynamic pool.

Fixed

  • Ensure dynamic pool does not alter worker choice strategy expected behavior.

[2.4.0] - 2023-04-04

Added

  • Add LESS_BUSY worker choice strategy.

Changed

  • Optimize worker storage in pool.
  • Optimize worker alive status check.
  • BREAKING CHANGE: Rename worker choice strategy LESS_RECENTLY_USED to LESS_USED.
  • Optimize LESS_USED worker choice strategy.
  • Update benchmark versus external threads pools.
  • Optimize tasks usage statistics requirements for worker choice strategy.

Fixed

  • Ensure trimmable characters are checked at pool initialization.
  • Fix message id integer overflow.
  • Fix pool worker removal in worker choice strategy internals.
  • Fix package publication with pnpm.

[2.4.0-3] - 2023-04-04

Added

  • Add LESS_BUSY worker choice strategy.

Changed

  • Optimize worker storage in pool.
  • Optimize worker alive status check.
  • BREAKING CHANGE: Rename worker choice strategy LESS_RECENTLY_USED to LESS_USED.
  • Optimize LESS_USED worker choice strategy.
  • Update benchmark versus external threads pools.

Fixed

  • Ensure trimmable characters are checked at pool initialization.
  • Fix message id integer overflow.
  • Fix pool worker removal in worker choice strategy internals.
  • Fix package publication with pnpm.

[2.4.0-2] - 2023-04-03

Added

  • Add LESS_BUSY worker choice strategy.

Changed

  • Optimize worker storage in pool.
  • Optimize worker alive status check.
  • BREAKING CHANGE: Rename worker choice strategy LESS_RECENTLY_USED to LESS_USED.
  • Optimize LESS_USED worker choice strategy.

Fixed

  • Ensure trimmable characters are checked at pool initialization.
  • Fix message id integer overflow.
  • Fix pool worker removal in worker choice strategy internals.
  • Fix package publication with pnpm.

[2.4.0-1] - 2023-04-03

Added

  • Add LESS_BUSY worker choice strategy.

Changed

  • Optimize worker storage in pool.
  • Optimize worker alive status check.
  • BREAKING CHANGE: Rename worker choice strategy LESS_RECENTLY_USED to LESS_USED.
  • Optimize LESS_USED worker choice strategy.

Fixed

  • Ensure trimmable characters are checked at pool initialization.
  • Fix message id integer overflow.
  • Fix pool worker removal in worker choice strategy internals.

[2.4.0-0] - 2023-04-03

Added

  • Add LESS_BUSY worker choice strategy.

Changed

  • Optimize worker storage in pool.
  • Optimize worker alive status check.
  • BREAKING CHANGE: Rename worker choice strategy LESS_RECENTLY_USED to LESS_USED.
  • Optimize LESS_USED worker choice strategy.

Fixed

  • Ensure trimmable characters are checked at pool initialization.
  • Fix message id integer overflow.
  • Fix pool worker removal in worker choice strategy internals.

[2.3.10] - 2023-03-18

Fixed

  • Fix package.json exports syntax for ESM and CommonJS.

Changed

  • Permit SemVer pre-release publication.

[2.3.10-2] - 2023-03-18

Fixed

  • Fix package.json exports syntax for ESM and CommonJS.

[2.3.10-1] - 2023-03-18

Changed

  • Permit SemVer pre-release publication.

[2.3.10-0] - 2023-03-18

Fixed

  • Fix package.json exports syntax for ESM and CommonJS.

[2.3.9] - 2023-03-18

Changed

  • Introduce ESM module support along with CommonJS one.

Fixed

  • Fix brown paper bag bug referencing the same object literal.

[2.3.8] - 2023-03-18

Changed

  • Switch internal benchmarking code to benny.
  • Switch to TypeScript 5.x.x.
  • Switch rollup bundler plugins to core ones.
  • Switch to TSDoc syntax.
  • Enforce conventional commits.

Fixed

  • Fix random integer generator.
  • Fix worker choice strategy pool type identification at initialization.

[2.3.7] - 2022-10-23

Changed

  • Switch to open collective FOSS project funding platform.
  • Switch to ts-standard linter configuration on TypeScript code.

Fixed

  • Fixed missing async on pool execute method.
  • Fixed typing in TypeScript example.
  • Fixed types in unit tests.

[2.3.6] - 2022-10-22

Changed

  • Cleanup pool attributes and methods.
  • Refine error types thrown.

Fixed

  • Fix continuous integration build on windows.
  • Fix code coverage reporting by using c8 instead of nyc.

[2.3.5] - 2022-10-21

Changed

  • Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
  • Optimize tasks usage lookup implementation.

Fixed

  • Fix missed pool event emitter type export.
  • Fix typedoc documentation generation.

[2.3.4] - 2022-10-17

Added

  • Fully automate release process with release-it.

Changed

  • Optimize fair share task scheduling algorithm implementation.
  • Update benchmark versus external pools results with latest version.

[2.3.3] - 2022-10-15

Added

[2.3.2] - 2022-10-14

Changed

  • Optimize fair share worker selection strategy implementation.

Fixed

  • Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.

[2.3.1] - 2022-10-13

Added

  • Pool worker choice strategies:
    • WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
    • WorkerChoiceStrategies.FAIR_SHARE strategy based on fair share scheduling algorithm using tasks execution time for now.

[2.2.2] - 2022-10-09

Fixed

  • Fixed README.md file.

[2.2.1] - 2022-10-08

Added

  • Dynamic worker choice strategy change at runtime.

[2.2.0] - 2022-01-05

Breaking Changes

  • Support only Node.js version 16.x.x for cluster pool: upstream cluster API have changed on that version.

[2.1.0] - 2021-08-29

Added

  • Add an optional pool option messageHandler to PoolOptions<Worker> for registering a message handler callback on each worker.

Breaking Changes

  • AbstractWorker class maxInactiveTime, killBehavior and async attributes have been removed in favour of the same ones in the worker options opts public attribute.
  • AbstractWorker class lastTask attribute have been renamed to lastTaskTimestamp.
  • AbstractWorker class interval attribute have been renamed to aliveInterval.
  • AbstractWorker class cannot be instantiated without specifying the mainWorker argument referencing the main worker.

[2.0.2] - 2021-05-12

Bug fixes

  • Fix busy event emission on fixed pool type

[2.0.1] - 2021-03-16

Bug fixes

  • Check if pool options are properly set.
  • busy event is emitted on all pool types.

[2.0.0] - 2021-03-01

Bug fixes

  • Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).

Breaking Changes

  • FullPool event is now renamed to busy.
  • 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

FixedThreadPoolOptions and DynamicThreadPoolOptions type declarations have been merged to PoolOptions<Worker>.

New export strategy

// Before
const DynamicThreadPool = require('poolifier/lib/dynamic')
// After
const { DynamicThreadPool } = require('poolifier/lib/dynamic')

But you should always prefer just using

const { DynamicThreadPool } = require('poolifier')

New type definitions for input data and response

For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data.
This is not a limitation by poolifier but Node.js.

Public property replacements

numWorkers property is now numberOfWorkers

Internal (protected) properties and methods renaming

These properties are not intended for end users

  • id => nextMessageId

These methods are not intended for end users

  • _chooseWorker => chooseWorker
  • _newWorker => createWorker
  • _execute => internalExecute
  • _chooseWorker => chooseWorker
  • _checkAlive => checkAlive
  • _run => run
  • _runAsync => runAsync

[1.1.0] - 2020-05-21

Added

  • ThreadWorker support async functions as option
  • Various external library patches

[1.0.0] - 2020-01-24

Added

  • FixedThreadPool implementation
  • DynamicThreadPool implementation
  • WorkerThread implementation to improve developer experience