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