3 All notable changes to this project will be documented in this file.
5 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
10 ## [2.6.10] - 2023-07-08
14 - Ensure workers are not recreated on error at pool startup.
18 - Add `ready` and `strategy` fields to pool information.
19 - Add pool event `ready` to notify when the number of workers created in the pool has reached the maximum size expected and are ready.
20 - Add dynamic pool sizing checks.
22 ## [2.6.9] - 2023-07-07
26 - Recreate the right worker type on uncaught exception.
30 - Add minimum and maximum to internal measurement statistics.
31 - Add `runTime` and `waitTime` to pool information.
32 - Check worker inactive time only on dynamic worker.
34 ## [2.6.8] - 2023-07-03
38 - Brown paper bag release to fix version handling in pool information.
40 ## [2.6.7] - 2023-07-03
44 - Ensure worker queued tasks at error are reassigned to other pool workers.
48 - Add pool `utilization` ratio to pool information.
49 - Add `version` to pool information.
50 - Add worker information to worker nodes.
52 ## [2.6.6] - 2023-07-01
56 - Add safe helper `availableParallelism` to help sizing the pool.
60 - Ensure message handler is only registered in worker.
62 ## [2.6.5] - 2023-06-27
66 - Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
70 - Artificial version bump to 2.6.5 to workaround publication issue.
71 - Ensure cluster pool destroy() gracefully shutdowns worker's server.
72 - Ensure pool event is emitted before task error promise rejection.
73 - Fix queued tasks count computation.
77 - Remove unneeded worker-threads worker `MessageChannel` internal usage for IPC.
79 ## [2.6.4] - 2023-06-27
83 - Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
87 - Ensure cluster pool destroy() gracefully shutdowns worker's server.
88 - Ensure pool event is emitted before task error promise rejection.
89 - Fix queued tasks count computation.
93 - Remove unneeded worker-threads worker `MessageChannel` internal usage for IPC.
95 ## [2.6.3] - 2023-06-19
99 - Ensure no tasks are queued when trying to soft kill a dynamic worker.
100 - Update strategies internals after statistics computation.
104 - Optimize O(1) queue implementation.
106 ## [2.6.2] - 2023-06-12
110 - Fix new worker use after creation in dynamic pool given the current worker choice strategy.
112 ## [2.6.1] - 2023-06-10
116 - Add worker choice strategy documentation: [README.md](./src/pools/selection-strategies/README.md).
120 - Fix average statistics computation: ensure failed tasks are not accounted.
122 ## [2.6.0] - 2023-06-09
126 - Add `LEAST_ELU` worker choice strategy (experimental).
127 - Add tasks ELU instead of runtime support to `FAIR_SHARE` worker choice strategy.
131 - Refactor pool worker node usage internals.
132 - Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed.
133 - Breaking change: pool information `info` property object fields have been renamed.
137 - Fix wait time accounting.
138 - Ensure worker choice strategy `LEAST_BUSY` accounts also tasks wait time.
139 - Ensure worker choice strategy `LEAST_USED` accounts also queued tasks.
141 ## [2.5.4] - 2023-06-07
145 - Add Event Loop Utilization (ELU) statistics to worker tasks usage.
149 - Compute statistics at the worker level only if needed.
150 - Add `worker-threads` options to thread pool options.
154 - Make the `LEAST_BUSY` strategy only relies on task runtime.
156 ## [2.5.3] - 2023-06-04
160 - Refine pool information content.
161 - Limit pool internals public exposure.
163 ## [2.5.2] - 2023-06-02
167 - Add `taskError` pool event for task execution error.
168 - Add pool information `info` property to pool.
169 - Emit pool information on `busy` and `full` pool events.
171 ## [2.5.1] - 2023-06-01
175 - Add pool option `restartWorkerOnError` to restart worker on uncaught error. Default to `true`.
176 - Add `error` pool event for uncaught worker error.
178 ## [2.5.0] - 2023-05-31
182 - Switch pool event emitter to `EventEmitterAsyncResource`.
183 - Add tasks wait time accounting in per worker tasks usage.
184 - Add interleaved weighted round robin `INTERLEAVED_WEIGHTED_ROUND_ROBIN` worker choice strategy (experimental).
188 - Renamed worker choice strategy `LESS_BUSY` to `LEAST_BUSY` and `LESS_USED` to `LEAST_USED`.
190 ## [2.4.14] - 2023-05-09
194 - Ensure no undefined task runtime can land in the tasks history.
195 - Fix median computation implementation once again.
199 - Unit tests for median and queue implementations.
201 ## [2.4.13] - 2023-05-08
205 - Fix worker choice strategy options validation.
206 - Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.
208 ## [2.4.12] - 2023-05-06
212 - Support multiple task functions per worker.
213 - Add custom worker weights support to worker choice strategies options.
217 - Use O(1) queue implementation for tasks queueing.
221 - Fix median computation implementation.
222 - Fix fair share worker choice strategy internals update.
224 ## [2.4.11] - 2023-04-23
228 - Optimize free worker finding in worker choice strategies.
230 ## [2.4.10] - 2023-04-15
234 - Fix typescript type definition for worker function: ensure the input data is optional.
235 - Fix typescript type definition for pool execute(): ensure the input data is optional.
237 ## [2.4.9] - 2023-04-15
241 - Add tasks queue enablement runtime setter to pool.
242 - Add tasks queue options runtime setter to pool.
243 - Add worker choice strategy options runtime setter to pool.
247 - Remove the tasks queuing experimental status.
251 - Fix worker function type definition and validation.
252 - Fix worker choice strategy options handling.
254 ## [2.4.8] - 2023-04-12
258 - Fix message between main worker and worker type definition for tasks.
259 - Fix code documentation.
261 ## [2.4.7] - 2023-04-11
265 - Add worker tasks queue options to pool options.
269 - Fix missing documentation.
271 ## [2.4.6] - 2023-04-10
275 - Ensure one task at a time is executed per worker with tasks queueing enabled.
276 - Properly count worker executing tasks with tasks queueing enabled.
278 ## [2.4.5] - 2023-04-09
282 - Use monotonic high resolution timer for worker tasks runtime.
283 - Add worker tasks median runtime to statistics.
284 - Add worker tasks queue (experimental).
286 ## [2.4.4] - 2023-04-07
290 - Add `PoolEvents` enumeration and `PoolEvent` type.
294 - Destroy worker only on alive check.
296 ## [2.4.3] - 2023-04-07
300 - Fix typedoc generation with inheritance.
302 ## [2.4.2] - 2023-04-06
306 - Add `full` event to dynamic pool.
307 - Keep worker choice strategy in memory for conditional reuse.
311 - Fix possible negative worker key at worker removal in worker choice strategies.
313 ## [2.4.1] - 2023-04-05
317 - Optimize worker choice strategy for dynamic pool.
321 - Ensure dynamic pool does not alter worker choice strategy expected behavior.
323 ## [2.4.0] - 2023-04-04
327 - Add `LESS_BUSY` worker choice strategy.
331 - Optimize worker storage in pool.
332 - Optimize worker alive status check.
333 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
334 - Optimize `LESS_USED` worker choice strategy.
335 - Update benchmarks versus external threads pools.
336 - Optimize tasks usage statistics requirements for worker choice strategy.
340 - Ensure trimmable characters are checked at pool initialization.
341 - Fix message id integer overflow.
342 - Fix pool worker removal in worker choice strategy internals.
343 - Fix package publication with pnpm.
345 ## [2.4.0-3] - 2023-04-04
349 - Add `LESS_BUSY` worker choice strategy.
353 - Optimize worker storage in pool.
354 - Optimize worker alive status check.
355 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
356 - Optimize `LESS_USED` worker choice strategy.
357 - Update benchmarks versus external threads pools.
361 - Ensure trimmable characters are checked at pool initialization.
362 - Fix message id integer overflow.
363 - Fix pool worker removal in worker choice strategy internals.
364 - Fix package publication with pnpm.
366 ## [2.4.0-2] - 2023-04-03
370 - Add `LESS_BUSY` worker choice strategy.
374 - Optimize worker storage in pool.
375 - Optimize worker alive status check.
376 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
377 - Optimize `LESS_USED` worker choice strategy.
381 - Ensure trimmable characters are checked at pool initialization.
382 - Fix message id integer overflow.
383 - Fix pool worker removal in worker choice strategy internals.
384 - Fix package publication with pnpm.
386 ## [2.4.0-1] - 2023-04-03
390 - Add `LESS_BUSY` worker choice strategy.
394 - Optimize worker storage in pool.
395 - Optimize worker alive status check.
396 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
397 - Optimize `LESS_USED` worker choice strategy.
401 - Ensure trimmable characters are checked at pool initialization.
402 - Fix message id integer overflow.
403 - Fix pool worker removal in worker choice strategy internals.
405 ## [2.4.0-0] - 2023-04-03
409 - Add `LESS_BUSY` worker choice strategy.
413 - Optimize worker storage in pool.
414 - Optimize worker alive status check.
415 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
416 - Optimize `LESS_USED` worker choice strategy.
420 - Ensure trimmable characters are checked at pool initialization.
421 - Fix message id integer overflow.
422 - Fix pool worker removal in worker choice strategy internals.
424 ## [2.3.10] - 2023-03-18
428 - Fix `exports` syntax for ESM and CommonJS.
432 - Permit SemVer pre-release publication.
434 ## [2.3.10-2] - 2023-03-18
438 - Fix `exports` syntax for ESM and CommonJS.
440 ## [2.3.10-1] - 2023-03-18
444 - Permit SemVer pre-release publication.
446 ## [2.3.10-0] - 2023-03-18
450 - Fix `exports` syntax for ESM and CommonJS.
452 ## [2.3.9] - 2023-03-18
456 - Introduce ESM module support along with CommonJS one.
460 - Fix brown paper bag bug referencing the same object literal.
462 ## [2.3.8] - 2023-03-18
466 - Switch internal benchmarking code to benny.
467 - Switch to TypeScript 5.x.x.
468 - Switch rollup bundler plugins to core ones.
469 - Switch to TSDoc syntax.
470 - Enforce conventional commits.
474 - Fix random integer generator.
475 - Fix worker choice strategy pool type identification at initialization.
477 ## [2.3.7] - 2022-10-23
481 - Switch to open collective FOSS project funding platform.
482 - Switch to ts-standard linter configuration on TypeScript code.
486 - Fixed missing async on pool execute method.
487 - Fixed typing in TypeScript example.
488 - Fixed types in unit tests.
490 ## [2.3.6] - 2022-10-22
494 - Cleanup pool attributes and methods.
495 - Refine error types thrown.
499 - Fix continuous integration build on windows.
500 - Fix code coverage reporting by using c8 instead of nyc.
502 ## [2.3.5] - 2022-10-21
506 - Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
507 - Optimize tasks usage lookup implementation.
511 - Fix missed pool event emitter type export.
512 - Fix typedoc documentation generation.
514 ## [2.3.4] - 2022-10-17
518 - Fully automate release process with release-it.
522 - Optimize fair share task scheduling algorithm implementation.
523 - Update benchmarks versus external pools results with latest version.
525 ## [2.3.3] - 2022-10-15
529 - Add support for [cluster settings](https://nodejs.org/api/cluster.html#cluster_cluster_settings) in cluster pool options.
531 ## [2.3.2] - 2022-10-14
535 - Optimize fair share worker selection strategy implementation.
539 - Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.
541 ## [2.3.1] - 2022-10-13
545 - Pool worker choice strategies:
546 - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN` strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
547 - `WorkerChoiceStrategies.FAIR_SHARE` strategy based on fair share scheduling algorithm using tasks execution time for now.
549 ## [2.2.2] - 2022-10-09
553 - Fixed `README.md` file.
555 ## [2.2.1] - 2022-10-08
559 - Dynamic worker choice strategy change at runtime.
561 ## [2.2.0] - 2022-01-05
565 - Support only NodeJS version 16.x.x for cluster pool: upstream cluster API have changed on that version.
567 ## [2.1.0] - 2021-08-29
571 - Add an optional pool option `messageHandler` to `PoolOptions<Worker>` for registering a message handler callback on each worker.
575 - `AbstractWorker` class `maxInactiveTime`, `killBehavior` and `async` attributes have been removed in favour of the same ones in the worker options `opts` public attribute.
576 - `AbstractWorker` class `lastTask` attribute have been renamed to `lastTaskTimestamp`.
577 - `AbstractWorker` class `interval` attribute have been renamed to `aliveInterval`.
578 - `AbstractWorker` class cannot be instantiated without specifying the `mainWorker` argument referencing the main worker.
580 ## [2.0.2] - 2021-05-12
584 - Fix `busy` event emission on fixed pool type
586 ## [2.0.1] - 2021-03-16
590 - Check if pool options are properly set.
591 - `busy` event is emitted on all pool types.
593 ## [2.0.0] - 2021-03-01
597 - Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).
601 - `FullPool` event is now renamed to `busy`.
602 - `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
603 _Find more details on our JSDoc._
605 - `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
607 - We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
609 ### Pool options types declaration merge
611 `FixedThreadPoolOptions` and `DynamicThreadPoolOptions` type declarations have been merged to `PoolOptions<Worker>`.
613 #### New `export` strategy
617 const DynamicThreadPool = require('poolifier/lib/dynamic')
619 const { DynamicThreadPool } = require('poolifier/lib/dynamic')
622 But you should always prefer just using
625 const { DynamicThreadPool } = require('poolifier')
628 #### New type definitions for input data and response
630 For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data.
631 _This is not a limitation by poolifier but NodeJS._
633 #### Public property replacements
635 `numWorkers` property is now `numberOfWorkers`
637 #### Internal (protected) properties and methods renaming
639 These properties are not intended for end users
641 - `id` => `nextMessageId`
643 These methods are not intended for end users
645 - `_chooseWorker` => `chooseWorker`
646 - `_newWorker` => `createWorker`
647 - `_execute` => `internalExecute`
648 - `_chooseWorker` => `chooseWorker`
649 - `_checkAlive` => `checkAlive`
651 - `_runAsync` => `runAsync`
653 ## [1.1.0] - 2020-05-21
657 - ThreadWorker support async functions as option
658 - Various external library patches
660 ## [1.0.0] - 2020-01-24
664 - FixedThreadPool implementation
665 - DynamicThreadPool implementation
666 - WorkerThread implementation to improve developer experience