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