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