docs: add changelog entry
[poolifier.git] / CHANGELOG.md
1 # Changelog
2
3 All notable changes to this project will be documented in this file.
4
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).
7
8 ## [Unreleased]
9
10 ### Fixed
11
12 - Avoid queued tasks redistribution on the errored worker node.
13
14 ## [4.0.4] - 2024-05-08
15
16 ### Fixed
17
18 - Disable `tasksStealingOnBackPressure` by default until performance issues under heavy load are sorted out.
19
20 ## [4.0.3] - 2024-05-08
21
22 ### Changed
23
24 - Optimize task(s) stealing by dequeuing task(s) from the last prioritized bucket.
25
26 ## [4.0.2] - 2024-05-06
27
28 ### Fixed
29
30 - Ensure poolifier worker task performance measurement requirements are synchronized with task function objects' worker choice strategies.
31
32 ## [4.0.1] - 2024-05-02
33
34 ### Fixed
35
36 - Ensure dynamic worker node are initialized with sensible worker node usage default values to avoid worker choice strategies biased decisions.
37 - 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.
38
39 ## [4.0.0] - 2024-04-30
40
41 ### Changed
42
43 - 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 }`.
44 - Add priority queue based tasks queueing. One priority queue is divided into prioritized buckets to avoid queued tasks starvation under load.
45 - BREAKING CHANGE: `listTaskFunctionNames()` to `listTaskFunctionsProperties()` in pool and worker API returning registered task functions properties.
46 - BREAKING CHANGE: `strategy` field in pool information renamed to `defaultStrategy`.
47
48 ### Fixed
49
50 - Ensure worker choice strategy options changes at runtime are propagated to poolifier workers.
51
52 ## [3.1.30] - 2024-04-22
53
54 ### Fixed
55
56 - Fix `transferList` argument type definition.
57
58 ## [3.1.29] - 2024-04-02
59
60 ### Fixed
61
62 - Fix possible race condition at worker node recreation on worker `error` and `exit` events.
63
64 ## [3.1.28] - 2024-04-01
65
66 ### Fixed
67
68 - Ensure the minimum number of workers on a started pool is guaranteed.
69
70 ## [3.1.27] - 2024-03-27
71
72 ### Fixed
73
74 - Fix publishing on JSR, take 4.
75
76 ## [3.1.26] - 2024-03-27
77
78 ### Fixed
79
80 - Fix publishing on JSR, take 3.
81
82 ## [3.1.25] - 2024-03-27
83
84 ### Fixed
85
86 - Fix publishing on JSR, take 2.
87
88 ## [3.1.24] - 2024-03-27
89
90 ### Fixed
91
92 - Fix publishing on JSR.
93
94 ## [3.1.23] - 2024-03-27
95
96 ### Changed
97
98 - Publish on JSR.
99
100 ## [3.1.22] - 2024-03-15
101
102 ### Fixed
103
104 - Fix pool event emitter registered callbacks removal at `destroy()`.
105
106 ## [3.1.21] - 2024-02-22
107
108 ### Fixed
109
110 - Fix null exception regression: [#1496](https://github.com/poolifier/poolifier/issues/1496).
111
112 ## [3.1.20] - 2024-02-11
113
114 ### Fixed
115
116 - Ensure `worker_threads` workers are unreferenced at termination.
117
118 ## [3.1.19] - 2024-01-16
119
120 ### Fixed
121
122 - Fix possible null exception at task finishing handling.
123
124 ### Changed
125
126 - Optimize Deque implementation to improve tasks queueing performance.
127
128 ## [3.1.18] - 2024-01-06
129
130 ### Fixed
131
132 - Fix dynamic pool with minimum number of workers set to zero: [#1748](https://github.com/poolifier/poolifier/issues/1748).
133
134 ## [3.1.17] - 2024-01-05
135
136 ### Changed
137
138 - Improve performance by clean up unneeded condition checks on hot code paths.
139
140 ## [3.1.16] - 2024-01-03
141
142 ### Fixed
143
144 - Add missing type to TS type definitions.
145
146 ## [3.1.15] - 2024-01-02
147
148 ### Fixed
149
150 - Fix CommonJS support with TypeScript: [#1821](https://github.com/poolifier/poolifier/issues/1821).
151
152 ## [3.1.15-0] - 2024-01-02
153
154 ### Fixed
155
156 - Fix CommonJS support with TypeScript: [#1821](https://github.com/poolifier/poolifier/issues/1821).
157
158 ## [3.1.14] - 2024-01-01
159
160 ### Fixed
161
162 - Properly handle dynamic pool with zero minimum size.
163
164 ## [3.1.13] - 2023-12-30
165
166 ### Changed
167
168 - Reduce branching in several hot code paths.
169 - Use faster object cloning implementation.
170
171 ## [3.1.12] - 2023-12-27
172
173 ### Fixed
174
175 - Fix tasks redistribution triggers at pool destroying.
176
177 ### Changed
178
179 - Switch TypeScript module resolution to Node16.
180
181 ## [3.1.12-0] - 2023-12-27
182
183 ### Fixed
184
185 - Fix tasks redistribution triggers at pool destroying.
186
187 ## [3.1.11] - 2023-12-24
188
189 ### Fixed
190
191 - Avoid worker node cross tasks stealing.
192 - Ensure only half the pool worker nodes can steal tasks.
193
194 ## [3.1.10] - 2023-12-23
195
196 ### Changed
197
198 - Avoid useless branching on pool type.
199
200 ## [3.1.9] - 2023-12-22
201
202 ### Changed
203
204 - Readd ThreadPoolOptions and ClusterPoolOptions TS type aliases to PoolOptions.
205
206 ## [3.1.8] - 2023-12-21
207
208 ### Fixed
209
210 - Fix default worker weight computation.
211 - Fix possible null exception at pool destroying.
212
213 ## [3.1.7] - 2023-12-20
214
215 ### Fixed
216
217 - Ensure worker choice strategies implementation wait for worker node readiness: [#1748](https://github.com/poolifier/poolifier/issues/1748).
218
219 ## [3.1.6] - 2023-12-18
220
221 ### Fixed
222
223 - Fix pool destroying with tasks queuing enabled.
224
225 ## [3.1.5] - 2023-12-18
226
227 ### Added
228
229 - Add queued tasks end timeout support to worker node termination.
230
231 ## [3.1.4] - 2023-12-18
232
233 ### Fixed
234
235 - Make more robust the fix for possible null exception at handling task execution response.
236
237 ## [3.1.3] - 2023-12-17
238
239 ### Fixed
240
241 - Fix possible null exception at handling task execution response.
242
243 ## [3.1.2] - 2023-12-17
244
245 ### Fixed
246
247 - Wait for queued tasks to end at worker node termination.
248
249 ## [3.1.1] - 2023-12-16
250
251 ### Fixed
252
253 - Fix pool options TS type definition.
254
255 ## [3.1.0] - 2023-12-16
256
257 ### Changed
258
259 - TypeScript breaking change: merge ThreadPoolOptions and ClusterPoolOptions types into PoolOptions type.
260
261 ## [3.0.14] - 2023-12-13
262
263 ### Fixed
264
265 - Fix possible null exception with worker_threads pools.
266
267 ## [3.0.13] - 2023-12-12
268
269 ### Fixed
270
271 - Ensure worker choice strategy wait for worker nodes readiness.
272
273 ### Changed
274
275 - Remove infinite retries support in worker choice strategy to avoid configuration leading to possible infinite recursion or loop.
276
277 ## [3.0.12] - 2023-12-12
278
279 ### Changed
280
281 - Add infinite retries support in worker choice strategy.
282
283 ## [3.0.11] - 2023-12-11
284
285 ### Fixed
286
287 - Ensure pool asynchronous resource properly track tasks execution.
288
289 ## [3.0.10] - 2023-12-08
290
291 ### Changed
292
293 - Add a fastpath when tasks stealing or redistribution is impossible.
294
295 ## [3.0.9] - 2023-11-26
296
297 ### Fixed
298
299 - Remove all pool events listener at pool destroying.
300 - Remove all worker node events listener at worker node destroying.
301 - Fix worker node event emitter listeners handling memory leak at pool options runtime change.
302
303 ## [3.0.8] - 2023-11-25
304
305 ### Fixed
306
307 - Ensure continuous tasks stealing on idle start at worker node idling.
308
309 ## [3.0.7] - 2023-11-24
310
311 ### Changed
312
313 - Make continuous tasks stealing start at worker node idling.
314
315 ## [3.0.6] - 2023-11-24
316
317 ### Fixed
318
319 - Ensure pool statuses are checked at initialization, `start()` or `destroy()`.
320 - Ensure pool `ready` event can be emitted after several `start()/destroy()` cycles.
321
322 ## [3.0.5] - 2023-10-27
323
324 ### Fixed
325
326 - Ensure pool `ready` event can be emitted only once.
327
328 ## [3.0.4] - 2023-10-20
329
330 ### Changed
331
332 - Switch to Bencher for benchmarking: [https://bencher.dev/perf/poolifier](https://bencher.dev/perf/poolifier).
333 - Use builtin retry mechanism in worker choice strategies instead of custom one.
334
335 ## [3.0.3] - 2023-10-19
336
337 ### Fixed
338
339 - Avoid null exception at sending message to worker.
340 - Avoid null exception at checking worker node readiness.
341
342 ## [3.0.2] - 2023-10-17
343
344 ### Fixed
345
346 - Fix race condition at dynamic worker node task assignment and scheduled removal. See issue [#1468](https://github.com/poolifier/poolifier/issues/1468) and [#1496](https://github.com/poolifier/poolifier/issues/1496).
347
348 ## [3.0.1] - 2023-10-16
349
350 ### Fixed
351
352 - Workaround possible race condition at work nodes array element removal and querying. See issue [#1468](https://github.com/poolifier/poolifier/issues/1468).
353
354 ### Changed
355
356 - Switch the worker node eventing code to `EventTarget` API.
357
358 ## [3.0.0] - 2023-10-08
359
360 ### Changed
361
362 - Remove Node.js 16.x.x (EOL) support.
363
364 ## [2.7.5] - 2023-10-03
365
366 ### Changed
367
368 - Use `EventEmitterAsyncResource` type from `@types/node` for pool event emitter. TypeScript users will need to update to latest `@types/node` version.
369
370 ## [2.7.4] - 2023-09-25
371
372 ### Fixed
373
374 - Fix source maps (bundler issue).
375
376 ## [2.7.3] - 2023-09-24
377
378 ### Changed
379
380 - Convert pool event emitter to event emitter async resource.
381
382 ## [2.7.2] - 2023-09-23
383
384 ### Changed
385
386 - Add source maps to npm package to ease debugging.
387
388 ### Added
389
390 - Continuous benchmarking versus other worker pools: [https://poolifier.github.io/benchmark](https://poolifier.github.io/benchmark).
391
392 ## [2.7.1] - 2023-09-20
393
394 ### Fixed
395
396 - Ensure worker message listener used one time are removed after usage.
397
398 ## [2.7.0] - 2023-09-19
399
400 ### Fixed
401
402 - Fix task stealing related tasks queue options handling at runtime.
403
404 ### Changed
405
406 - Rename `listTaskFunctions()` to `listTaskFunctionNames()` in pool and worker API.
407
408 ### Added
409
410 - Add `hasTaskFunction()`, `addTaskFunction()`, `removeTaskFunction()`, `setDefaultTaskFunction()` methods to pool API: [PR #1148](https://github.com/poolifier/poolifier/pull/1148).
411 - Stricter worker constructor arguments validation.
412
413 ## [2.6.45] - 2023-09-17
414
415 ### Changed
416
417 - Disable publication on GitHub packages registry on release until authentication issue is fixed.
418
419 ### Added
420
421 - Add `startWorkers` to pool options to whether start the minimum number of workers at pool initialization or not.
422 - Add `start()` method to pool API to start the minimum number of workers.
423 - 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.
424 - Continuous internal benchmarking: [https://poolifier.github.io/benchmark-results/dev/bench](https://poolifier.github.io/benchmark-results/dev/bench).
425
426 ## [2.6.44] - 2023-09-08
427
428 ### Fixed
429
430 - Use a dedicated PAT to publish on GitHub packages registry.
431
432 ### Added
433
434 - Publish on GitHub packages registry on release.
435
436 ### Changed
437
438 - Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128).
439
440 ## [2.6.43] - 2023-09-08
441
442 ### Added
443
444 - Publish on GitHub packages registry on release.
445
446 ### Changed
447
448 - Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128).
449
450 ## [2.6.42] - 2023-09-06
451
452 ### Changed
453
454 - Optimize hot code paths implementation: avoid unnecessary branching, add and use optimized helpers (min, max), use reduce() array helper, ...
455
456 ## [2.6.41] - 2023-09-03
457
458 ### Changed
459
460 - Optimize worker choice strategies implementation.
461
462 ## [2.6.40] - 2023-09-01
463
464 ### Fixed
465
466 - Do not pre-choose in WRR worker choice strategy to avoid bias.
467 - Avoid array out of bound in worker choice strategies after worker node removal.
468
469 ## [2.6.39] - 2023-08-30
470
471 ### Fixed
472
473 - Fix race condition in worker choice strategies at worker node info querying while not yet initialized.
474
475 ## [2.6.38] - 2023-08-30
476
477 ### Added
478
479 - Bundle typescript types declaration into one file.
480
481 ### Changed
482
483 - Improve interleaved weighted round robin worker choice strategy implementation.
484
485 ## [2.6.37] - 2023-08-28
486
487 ### Fixed
488
489 - Ensure unused worker usage statistics are deleted at runtime.
490
491 ### Changed
492
493 - Rename worker choice strategy options `choiceRetries` to `retries`.
494 - Avoid unnecessary branching in worker choice strategies.
495
496 ## [2.6.36] - 2023-08-27
497
498 ### Fixed
499
500 - Fix pool `execute()` arguments check.
501
502 ### Changed
503
504 - Make continuous tasks stealing algorithm less aggressive.
505 - Fine tune tasks stealing algorithm under back pressure.
506
507 ## [2.6.35] - 2023-08-25
508
509 ### Fixed
510
511 - Don't account worker usage statistics for tasks that have failed.
512 - Fix pool information runtime and wait time median computation.
513
514 ### Changed
515
516 - Update simple moving average implementation to use a circular buffer.
517 - Update simple moving median implementation to use a circular buffer.
518 - Account for stolen tasks in worker usage statistics and pool information.
519
520 ### Added
521
522 - Continuous tasks stealing algorithm.
523
524 ## [2.6.34] - 2023-08-24
525
526 ### Fixes
527
528 - Avoid cascading tasks stealing under back pressure.
529
530 ### Changed
531
532 - Add fastpath to queued tasks rescheduling.
533
534 ## [2.6.33] - 2023-08-24
535
536 ### Fixed
537
538 - Fix queued tasks rescheduling.
539
540 ### Changed
541
542 - Rename tasks queue options `queueMaxSize` to `size`.
543
544 ### Added
545
546 - Task stealing scheduling algorithm if tasks queueing is enabled.
547
548 ## [2.6.32] - 2023-08-23
549
550 ### Fixed
551
552 - Ensure no task can be executed when the pool is destroyed.
553
554 ### Added
555
556 - Add `queueMaxSize` option to tasks queue options.
557 - Add O(1) deque implementation implemented with doubly linked list and use it for tasks queueing.
558 - Add tasks stealing algorithm when a worker node queue is back pressured if tasks queueing is enabled.
559
560 ## [2.6.31] - 2023-08-20
561
562 ### Fixed
563
564 - Fix worker choice strategy retries mechanism in some edge cases.
565
566 ### Changed
567
568 - Make orthogonal worker choice strategies tasks distribution and created dynamic worker usage.
569 - Remove the experimental status of the `LEAST_ELU` worker choice strategy.
570
571 ## [2.6.30] - 2023-08-19
572
573 ### Fixed
574
575 - Ensure pool event `backPressure` is emitted.
576 - Ensure pool event `full` is emitted only once.
577 - Ensure worker node cannot be instantiated without proper arguments.
578
579 ## [2.6.29] - 2023-08-18
580
581 ### Fixed
582
583 - Fix race condition between readiness and task functions worker message handling at startup.
584 - Fix duplicate task function worker usage statistics computation per task function.
585 - Update task function worker usage statistics if and only if there's at least two different task functions.
586 - Fix race condition at task function worker usage executing task computation leading to negative value.
587
588 ### Added
589
590 - 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).
591 - Use back pressure detection in worker choice strategies.
592 - Add worker choice strategies retries mechanism if no worker is eligible.
593
594 ## [2.6.28] - 2023-08-16
595
596 ### Fixed
597
598 - Ensure pool workers are properly initialized.
599
600 ### Added
601
602 - HTTP server pool examples: express-cluster, express-hybrid.
603
604 ### Changed
605
606 - Remove now useless branching in worker hot code path.
607
608 ## [2.6.27] - 2023-08-15
609
610 ### Fixed
611
612 - Add `KillHandler` type definition to exported types.
613
614 ### Added
615
616 - Add `destroy` event to pool API.
617
618 ## [2.6.26] - 2023-08-15
619
620 ### Added
621
622 - Add kill handler to worker options allowing to execute custom code when worker is killed.
623 - Add `listTaskFunctions()` method to pool API.
624 - SMTP client pool example: nodemailer.
625
626 ## [2.6.25] - 2023-08-13
627
628 ### Added
629
630 - HTTP server pool examples: fastify-cluster, fastify-hybrid.
631 - WebSocket server pool examples: ws-cluster, ws-hybrid.
632
633 ## [2.6.24] - 2023-08-12
634
635 ### Added
636
637 - Add array of transferable objects to the `execute()` method arguments.
638 - WebSocket server pool examples: ws-worker_threads.
639
640 ## [2.6.23] - 2023-08-11
641
642 ### Fixed
643
644 - 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.
645
646 ### Added
647
648 - HTTP client pool examples: fetch, node-fetch and axios with multiple task functions.
649 - HTTP server pool examples: express-worker_threads, fastify-worker_threads.
650
651 ## [2.6.22] - 2023-08-10
652
653 ### Fixed
654
655 - Add missing `types` field to package.json `exports`.
656
657 ### Changed
658
659 - Structure markdown documentation (PR #811).
660
661 ## [2.6.21] - 2023-08-03
662
663 ### Changed
664
665 - Improve code documentation.
666 - Code refactoring and cleanup for better maintainability and readability.
667
668 ## [2.6.20] - 2023-07-21
669
670 ### Fixed
671
672 - Fix queued tasks redistribution on error task execution starvation.
673 - Ensure tasks queueing per worker condition is untangled from the pool busyness semantic.
674
675 ### Changed
676
677 - Drastically reduce lookups by worker in the worker nodes.
678
679 ## [2.6.19] - 2023-07-20
680
681 ### Added
682
683 - Dedicated internal communication channel for worker_threads pools.
684
685 ## [2.6.18] - 2023-07-19
686
687 ### Changed
688
689 - Code refactoring and cleanup for better maintainability and readability. Bundle size is a bit smaller.
690
691 ## [2.6.17] - 2023-07-16
692
693 ### Added
694
695 - Add `listTaskFunctions()` method to worker API.
696
697 ## [2.6.16] - 2023-07-12
698
699 ### Fixed
700
701 - Fix pool startup detection.
702 - Fix worker task functions handling.
703
704 ## [2.6.15] - 2023-07-11
705
706 ### Added
707
708 - Take into account worker node readiness in worker choice strategies.
709
710 ## [2.6.14] - 2023-07-10
711
712 ### Fixed
713
714 - Fix task function statistics tracking.
715
716 ## [2.6.13] - 2023-07-10
717
718 ### Added
719
720 - Add per task function statistics tracking.
721 - Add public methods to manipulate the worker task functions at runtime.
722
723 ## [2.6.12] - 2023-07-09
724
725 ### Fixed
726
727 - Workaround import issue with `node:os` module in node 16.x.x.
728
729 ## [2.6.11] - 2023-07-09
730
731 ### Fixed
732
733 - Fix pool readiness semantic.
734
735 ## [2.6.10] - 2023-07-08
736
737 ### Fixed
738
739 - Ensure workers are not recreated on error at pool startup.
740
741 ### Added
742
743 - Add `ready` and `strategy` fields to pool information.
744 - Add pool event `ready` to notify when the number of workers created in the pool has reached the maximum size expected and are ready.
745 - Add dynamic pool sizing checks.
746
747 ## [2.6.9] - 2023-07-07
748
749 ### Fixed
750
751 - Recreate the right worker type on uncaught exception.
752
753 ### Added
754
755 - Add minimum and maximum to internal measurement statistics.
756 - Add `runTime` and `waitTime` to pool information.
757 - Check worker inactive time only on dynamic worker.
758
759 ## [2.6.8] - 2023-07-03
760
761 ### Fixed
762
763 - Brown paper bag release to fix version handling in pool information.
764
765 ## [2.6.7] - 2023-07-03
766
767 ### Fixed
768
769 - Ensure worker queued tasks at error are reassigned to other pool workers.
770
771 ### Added
772
773 - Add pool `utilization` ratio to pool information.
774 - Add `version` to pool information.
775 - Add worker information to worker nodes.
776
777 ## [2.6.6] - 2023-07-01
778
779 ### Added
780
781 - Add safe helper `availableParallelism()` to help sizing the pool.
782
783 ### Fixed
784
785 - Ensure message handler is only registered in worker.
786
787 ## [2.6.5] - 2023-06-27
788
789 ### Known issues
790
791 - Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
792
793 ### Fixed
794
795 - Artificial version bump to 2.6.5 to workaround publication issue.
796 - Ensure cluster pool `destroy()` gracefully shutdowns worker's server.
797 - Ensure pool event is emitted before task error promise rejection.
798 - Fix queued tasks count computation.
799
800 ### Removed
801
802 - Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC.
803
804 ## [2.6.4] - 2023-06-27
805
806 ### Known issues
807
808 - Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
809
810 ### Fixed
811
812 - Ensure cluster pool `destroy()` gracefully shutdowns worker's server.
813 - Ensure pool event is emitted before task error promise rejection.
814 - Fix queued tasks count computation.
815
816 ### Removed
817
818 - Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC.
819
820 ## [2.6.3] - 2023-06-19
821
822 ### Fixed
823
824 - Ensure no tasks are queued when trying to soft kill a dynamic worker.
825 - Update strategies internals after statistics computation.
826
827 ### Changed
828
829 - Optimize O(1) queue implementation.
830
831 ## [2.6.2] - 2023-06-12
832
833 ### Fixed
834
835 - Fix new worker use after creation in dynamic pool given the current worker choice strategy.
836
837 ## [2.6.1] - 2023-06-10
838
839 ### Added
840
841 - Add worker choice strategy documentation: [README.md](./docs/worker-choice-strategies.md).
842
843 ### Fixed
844
845 - Fix average statistics computation: ensure failed tasks are not accounted.
846
847 ## [2.6.0] - 2023-06-09
848
849 ### Added
850
851 - Add `LEAST_ELU` worker choice strategy (experimental).
852 - Add tasks ELU instead of runtime support to `FAIR_SHARE` worker choice strategy.
853
854 ### Changed
855
856 - Refactor pool worker node usage internals.
857 - Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed.
858 - Breaking change: pool information `info` property object fields have been renamed.
859
860 ### Fixed
861
862 - Fix wait time accounting.
863 - Ensure worker choice strategy `LEAST_BUSY` accounts also tasks wait time.
864 - Ensure worker choice strategy `LEAST_USED` accounts also queued tasks.
865
866 ## [2.5.4] - 2023-06-07
867
868 ### Added
869
870 - Add Event Loop Utilization (ELU) statistics to worker tasks usage.
871
872 ### Changed
873
874 - Compute statistics at the worker level only if needed.
875 - Add `worker_threads` options to thread pool options.
876
877 ### Fixed
878
879 - Make the `LEAST_BUSY` strategy only relies on task runtime.
880
881 ## [2.5.3] - 2023-06-04
882
883 ### Changed
884
885 - Refine pool information content.
886 - Limit pool internals public exposure.
887
888 ## [2.5.2] - 2023-06-02
889
890 ### Added
891
892 - Add `taskError` pool event for task execution error.
893 - Add pool information `info` property to pool.
894 - Emit pool information on `busy` and `full` pool events.
895
896 ## [2.5.1] - 2023-06-01
897
898 ### Added
899
900 - Add pool option `restartWorkerOnError` to restart worker on uncaught error. Default to `true`.
901 - Add `error` pool event for uncaught worker error.
902
903 ## [2.5.0] - 2023-05-31
904
905 ### Added
906
907 - Switch pool event emitter to `EventEmitterAsyncResource`.
908 - Add tasks wait time accounting in per worker tasks usage.
909 - Add interleaved weighted round robin `INTERLEAVED_WEIGHTED_ROUND_ROBIN` worker choice strategy (experimental).
910
911 ### Changed
912
913 - Renamed worker choice strategy `LESS_BUSY` to `LEAST_BUSY` and `LESS_USED` to `LEAST_USED`.
914
915 ## [2.4.14] - 2023-05-09
916
917 ### Fixed
918
919 - Ensure no undefined task runtime can land in the tasks history.
920 - Fix median computation implementation once again.
921
922 ### Added
923
924 - Unit tests for median and queue implementations.
925
926 ## [2.4.13] - 2023-05-08
927
928 ### Fixed
929
930 - Fix worker choice strategy options validation.
931 - Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.
932
933 ## [2.4.12] - 2023-05-06
934
935 ### Added
936
937 - Support multiple task functions per worker.
938 - Add custom worker weights support to worker choice strategies options.
939
940 ### Changed
941
942 - Use O(1) queue implementation for tasks queueing.
943
944 ### Fixed
945
946 - Fix median computation implementation.
947 - Fix fair share worker choice strategy internals update.
948
949 ## [2.4.11] - 2023-04-23
950
951 ### Changed
952
953 - Optimize free worker finding in worker choice strategies.
954
955 ## [2.4.10] - 2023-04-15
956
957 ### Fixed
958
959 - Fix typescript type definition for task function: ensure the input data is optional.
960 - Fix typescript type definition for pool execute(): ensure the input data is optional.
961
962 ## [2.4.9] - 2023-04-15
963
964 ### Added
965
966 - Add tasks queue enablement runtime setter to pool.
967 - Add tasks queue options runtime setter to pool.
968 - Add worker choice strategy options runtime setter to pool.
969
970 ### Changed
971
972 - Remove the tasks queuing experimental status.
973
974 ### Fixed
975
976 - Fix task function type definition and validation.
977 - Fix worker choice strategy options handling.
978
979 ## [2.4.8] - 2023-04-12
980
981 ### Fixed
982
983 - Fix message between main worker and worker type definition for tasks.
984 - Fix code documentation.
985
986 ## [2.4.7] - 2023-04-11
987
988 ### Added
989
990 - Add worker tasks queue options to pool options.
991
992 ### Fixed
993
994 - Fix missing documentation.
995
996 ## [2.4.6] - 2023-04-10
997
998 ### Fixed
999
1000 - Ensure one task at a time is executed per worker with tasks queueing enabled.
1001 - Properly count worker executing tasks with tasks queueing enabled.
1002
1003 ## [2.4.5] - 2023-04-09
1004
1005 ### Added
1006
1007 - Use monotonic high resolution timer for worker tasks runtime.
1008 - Add worker tasks median runtime to statistics.
1009 - Add worker tasks queue (experimental).
1010
1011 ## [2.4.4] - 2023-04-07
1012
1013 ### Added
1014
1015 - Add `PoolEvents` enumeration and `PoolEvent` type.
1016
1017 ### Fixed
1018
1019 - Destroy worker only on alive check.
1020
1021 ## [2.4.3] - 2023-04-07
1022
1023 ### Fixed
1024
1025 - Fix typedoc generation with inheritance.
1026
1027 ## [2.4.2] - 2023-04-06
1028
1029 ### Added
1030
1031 - Add `full` event to dynamic pool.
1032 - Keep worker choice strategy in memory for conditional reuse.
1033
1034 ### Fixed
1035
1036 - Fix possible negative worker key at worker removal in worker choice strategies.
1037
1038 ## [2.4.1] - 2023-04-05
1039
1040 ### Changed
1041
1042 - Optimize worker choice strategy for dynamic pool.
1043
1044 ### Fixed
1045
1046 - Ensure dynamic pool does not alter worker choice strategy expected behavior.
1047
1048 ## [2.4.0] - 2023-04-04
1049
1050 ### Added
1051
1052 - Add `LESS_BUSY` worker choice strategy.
1053
1054 ### Changed
1055
1056 - Optimize worker storage in pool.
1057 - Optimize worker alive status check.
1058 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1059 - Optimize `LESS_USED` worker choice strategy.
1060 - Update benchmark versus external threads pools.
1061 - Optimize tasks usage statistics requirements for worker choice strategy.
1062
1063 ### Fixed
1064
1065 - Ensure trimmable characters are checked at pool initialization.
1066 - Fix message id integer overflow.
1067 - Fix pool worker removal in worker choice strategy internals.
1068 - Fix package publication with pnpm.
1069
1070 ## [2.4.0-3] - 2023-04-04
1071
1072 ### Added
1073
1074 - Add `LESS_BUSY` worker choice strategy.
1075
1076 ### Changed
1077
1078 - Optimize worker storage in pool.
1079 - Optimize worker alive status check.
1080 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1081 - Optimize `LESS_USED` worker choice strategy.
1082 - Update benchmark versus external threads pools.
1083
1084 ### Fixed
1085
1086 - Ensure trimmable characters are checked at pool initialization.
1087 - Fix message id integer overflow.
1088 - Fix pool worker removal in worker choice strategy internals.
1089 - Fix package publication with pnpm.
1090
1091 ## [2.4.0-2] - 2023-04-03
1092
1093 ### Added
1094
1095 - Add `LESS_BUSY` worker choice strategy.
1096
1097 ### Changed
1098
1099 - Optimize worker storage in pool.
1100 - Optimize worker alive status check.
1101 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1102 - Optimize `LESS_USED` worker choice strategy.
1103
1104 ### Fixed
1105
1106 - Ensure trimmable characters are checked at pool initialization.
1107 - Fix message id integer overflow.
1108 - Fix pool worker removal in worker choice strategy internals.
1109 - Fix package publication with pnpm.
1110
1111 ## [2.4.0-1] - 2023-04-03
1112
1113 ### Added
1114
1115 - Add `LESS_BUSY` worker choice strategy.
1116
1117 ### Changed
1118
1119 - Optimize worker storage in pool.
1120 - Optimize worker alive status check.
1121 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1122 - Optimize `LESS_USED` worker choice strategy.
1123
1124 ### Fixed
1125
1126 - Ensure trimmable characters are checked at pool initialization.
1127 - Fix message id integer overflow.
1128 - Fix pool worker removal in worker choice strategy internals.
1129
1130 ## [2.4.0-0] - 2023-04-03
1131
1132 ### Added
1133
1134 - Add `LESS_BUSY` worker choice strategy.
1135
1136 ### Changed
1137
1138 - Optimize worker storage in pool.
1139 - Optimize worker alive status check.
1140 - BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
1141 - Optimize `LESS_USED` worker choice strategy.
1142
1143 ### Fixed
1144
1145 - Ensure trimmable characters are checked at pool initialization.
1146 - Fix message id integer overflow.
1147 - Fix pool worker removal in worker choice strategy internals.
1148
1149 ## [2.3.10] - 2023-03-18
1150
1151 ### Fixed
1152
1153 - Fix package.json `exports` syntax for ESM and CommonJS.
1154
1155 ### Changed
1156
1157 - Permit SemVer pre-release publication.
1158
1159 ## [2.3.10-2] - 2023-03-18
1160
1161 ### Fixed
1162
1163 - Fix package.json `exports` syntax for ESM and CommonJS.
1164
1165 ## [2.3.10-1] - 2023-03-18
1166
1167 ### Changed
1168
1169 - Permit SemVer pre-release publication.
1170
1171 ## [2.3.10-0] - 2023-03-18
1172
1173 ### Fixed
1174
1175 - Fix package.json `exports` syntax for ESM and CommonJS.
1176
1177 ## [2.3.9] - 2023-03-18
1178
1179 ### Changed
1180
1181 - Introduce ESM module support along with CommonJS one.
1182
1183 ### Fixed
1184
1185 - Fix brown paper bag bug referencing the same object literal.
1186
1187 ## [2.3.8] - 2023-03-18
1188
1189 ### Changed
1190
1191 - Switch internal benchmarking code to benny.
1192 - Switch to TypeScript 5.x.x.
1193 - Switch rollup bundler plugins to core ones.
1194 - Switch to TSDoc syntax.
1195 - Enforce conventional commits.
1196
1197 ### Fixed
1198
1199 - Fix random integer generator.
1200 - Fix worker choice strategy pool type identification at initialization.
1201
1202 ## [2.3.7] - 2022-10-23
1203
1204 ### Changed
1205
1206 - Switch to open collective FOSS project funding platform.
1207 - Switch to ts-standard linter configuration on TypeScript code.
1208
1209 ### Fixed
1210
1211 - Fixed missing async on pool execute method.
1212 - Fixed typing in TypeScript example.
1213 - Fixed types in unit tests.
1214
1215 ## [2.3.6] - 2022-10-22
1216
1217 ### Changed
1218
1219 - Cleanup pool attributes and methods.
1220 - Refine error types thrown.
1221
1222 ### Fixed
1223
1224 - Fix continuous integration build on windows.
1225 - Fix code coverage reporting by using c8 instead of nyc.
1226
1227 ## [2.3.5] - 2022-10-21
1228
1229 ### Changed
1230
1231 - Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
1232 - Optimize tasks usage lookup implementation.
1233
1234 ### Fixed
1235
1236 - Fix missed pool event emitter type export.
1237 - Fix typedoc documentation generation.
1238
1239 ## [2.3.4] - 2022-10-17
1240
1241 ### Added
1242
1243 - Fully automate release process with release-it.
1244
1245 ### Changed
1246
1247 - Optimize fair share task scheduling algorithm implementation.
1248 - Update benchmark versus external pools results with latest version.
1249
1250 ## [2.3.3] - 2022-10-15
1251
1252 ### Added
1253
1254 - Add support for [cluster settings](https://nodejs.org/api/cluster.html#cluster_cluster_settings) in cluster pool options.
1255
1256 ## [2.3.2] - 2022-10-14
1257
1258 ### Changed
1259
1260 - Optimize fair share worker selection strategy implementation.
1261
1262 ### Fixed
1263
1264 - Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.
1265
1266 ## [2.3.1] - 2022-10-13
1267
1268 ### Added
1269
1270 - Pool worker choice strategies:
1271 - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN` strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
1272 - `WorkerChoiceStrategies.FAIR_SHARE` strategy based on fair share scheduling algorithm using tasks execution time for now.
1273
1274 ## [2.2.2] - 2022-10-09
1275
1276 ### Fixed
1277
1278 - Fixed `README.md` file.
1279
1280 ## [2.2.1] - 2022-10-08
1281
1282 ### Added
1283
1284 - Dynamic worker choice strategy change at runtime.
1285
1286 ## [2.2.0] - 2022-01-05
1287
1288 ### Breaking Changes
1289
1290 - Support only Node.js version 16.x.x for cluster pool: upstream cluster API have changed on that version.
1291
1292 ## [2.1.0] - 2021-08-29
1293
1294 ### Added
1295
1296 - Add an optional pool option `messageHandler` to `PoolOptions<Worker>` for registering a message handler callback on each worker.
1297
1298 ### Breaking Changes
1299
1300 - `AbstractWorker` class `maxInactiveTime`, `killBehavior` and `async` attributes have been removed in favour of the same ones in the worker options `opts` public attribute.
1301 - `AbstractWorker` class `lastTask` attribute have been renamed to `lastTaskTimestamp`.
1302 - `AbstractWorker` class `interval` attribute have been renamed to `aliveInterval`.
1303 - `AbstractWorker` class cannot be instantiated without specifying the `mainWorker` argument referencing the main worker.
1304
1305 ## [2.0.2] - 2021-05-12
1306
1307 ### Bug fixes
1308
1309 - Fix `busy` event emission on fixed pool type
1310
1311 ## [2.0.1] - 2021-03-16
1312
1313 ### Bug fixes
1314
1315 - Check if pool options are properly set.
1316 - `busy` event is emitted on all pool types.
1317
1318 ## [2.0.0] - 2021-03-01
1319
1320 ### Bug fixes
1321
1322 - Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).
1323
1324 ### Breaking Changes
1325
1326 - `FullPool` event is now renamed to `busy`.
1327 - `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
1328 _Find more details on our JSDoc._
1329
1330 - `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
1331
1332 - We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
1333
1334 ### Pool options types declaration merge
1335
1336 `FixedThreadPoolOptions` and `DynamicThreadPoolOptions` type declarations have been merged to `PoolOptions<Worker>`.
1337
1338 #### New `export` strategy
1339
1340 ```js
1341 // Before
1342 const DynamicThreadPool = require('poolifier/lib/dynamic')
1343 // After
1344 const { DynamicThreadPool } = require('poolifier/lib/dynamic')
1345 ```
1346
1347 But you should always prefer just using
1348
1349 ```js
1350 const { DynamicThreadPool } = require('poolifier')
1351 ```
1352
1353 #### New type definitions for input data and response
1354
1355 For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data.
1356 _This is not a limitation by poolifier but Node.js._
1357
1358 #### Public property replacements
1359
1360 `numWorkers` property is now `numberOfWorkers`
1361
1362 #### Internal (protected) properties and methods renaming
1363
1364 These properties are not intended for end users
1365
1366 - `id` => `nextMessageId`
1367
1368 These methods are not intended for end users
1369
1370 - `_chooseWorker` => `chooseWorker`
1371 - `_newWorker` => `createWorker`
1372 - `_execute` => `internalExecute`
1373 - `_chooseWorker` => `chooseWorker`
1374 - `_checkAlive` => `checkAlive`
1375 - `_run` => `run`
1376 - `_runAsync` => `runAsync`
1377
1378 ## [1.1.0] - 2020-05-21
1379
1380 ### Added
1381
1382 - ThreadWorker support async functions as option
1383 - Various external library patches
1384
1385 ## [1.0.0] - 2020-01-24
1386
1387 ### Added
1388
1389 - FixedThreadPool implementation
1390 - DynamicThreadPool implementation
1391 - WorkerThread implementation to improve developer experience