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