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