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