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