refactor: code cleanup
[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
JB
8## [Unreleased]
9
093af25b
JB
10### Changed
11
12- Disable publication on GitHub packages registry on release until authentication issue is fixed.
13
f1c674cd
JB
14### Added
15
47352846 16- Add `startWorkers` to pool options to whether start the minimum number of workers at pool creation or not.
cde5b54e 17- Add `start()` method to pool API to start the minimum number of workers.
d293923f 18- Add `taskStealing` and `tasksStealingOnPressure` to tasks queue options to whether enable task stealing or not and whether enable tasks stealing on back pressure or not.
2a87030e 19- Continuous internal benchmarking: https://poolifier.github.io/benchmark-results/dev/bench.
f1c674cd 20
bce9ffdf
JB
21## [2.6.44] - 2023-09-08
22
4cb259d3
JB
23### Fixed
24
25- Use a dedicated PAT to publish on GitHub packages registry.
26
27### Added
28
29- Publish on GitHub packages registry on release.
30
31### Changed
32
33- Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128).
34
fbda1e26
JB
35## [2.6.43] - 2023-09-08
36
15fc82ba
JB
37### Added
38
4cb259d3 39- Publish on GitHub packages registry on release.
15fc82ba
JB
40
41### Changed
42
4cb259d3 43- Switch from rome to biome: [PR #1128](https://github.com/poolifier/poolifier/pull/1128).
15fc82ba 44
b47306a3
JB
45## [2.6.42] - 2023-09-06
46
ad11ca81
JB
47### Changed
48
49- Optimize hot code paths implementation: avoid unnecessary branching, add and use optimized helpers (min, max), use reduce() array helper, ...
50
1b37751d
JB
51## [2.6.41] - 2023-09-03
52
f3a91bac
JB
53### Changed
54
55- Optimize worker choice strategies implementation.
56
7790a494
JB
57## [2.6.40] - 2023-09-01
58
6fe200b4
JB
59### Fixed
60
61- Do not pre-choose in WRR worker choice strategy to avoid bias.
68738842 62- Avoid array out of bound in worker choice strategies after worker node removal.
6fe200b4 63
766c7f84
JB
64## [2.6.39] - 2023-08-30
65
edf8ce4e
JB
66### Fixed
67
4cb259d3 68- Fix race condition in worker choice strategies at worker node info querying while not yet initialized.
edf8ce4e 69
904a5689
JB
70## [2.6.38] - 2023-08-30
71
b40c4b06
JB
72### Added
73
74- Bundle typescript types declaration into one file.
75
619f403b
JB
76### Changed
77
78- Improve interleaved weighted round robin worker choice strategy implementation.
79
5a24d71c
JB
80## [2.6.37] - 2023-08-28
81
bdb9d712
JB
82### Fixed
83
84- Ensure unused worker usage statistics are deleted at runtime.
85
8c0b113f
JB
86### Changed
87
88- Rename worker choice strategy options `choiceRetries` to `retries`.
574c5c8d 89- Avoid unnecessary branching in worker choice strategies.
8c0b113f 90
ba821940
JB
91## [2.6.36] - 2023-08-27
92
9d2d0da1
JB
93### Fixed
94
95- Fix pool `execute()` arguments check.
96
1f0766e7
JB
97### Changed
98
99- Make continuous tasks stealing algorithm less aggressive.
8780236f 100- Fine tune tasks stealing algorithm under back pressure.
1f0766e7 101
ffd2c1ff
JB
102## [2.6.35] - 2023-08-25
103
dc021bcc
JB
104### Fixed
105
106- Don't account worker usage statistics for tasks that have failed.
3baa0837 107- Fix pool information runtime and wait time median computation.
dc021bcc
JB
108
109### Changed
110
111- Update simple moving average implementation to use a circular buffer.
112- Update simple moving median implementation to use a circular buffer.
68cbdc84
JB
113- Account for stolen tasks in worker usage statistics and pool information.
114
115### Added
116
117- Continuous tasks stealing algorithm.
dc021bcc 118
c58bc2a1
JB
119## [2.6.34] - 2023-08-24
120
0bc68267
JB
121### Fixes
122
123- Avoid cascading tasks stealing under back pressure.
124
125### Changed
126
127- Add fastpath to queued tasks rescheduling.
128
39fb7ad0
JB
129## [2.6.33] - 2023-08-24
130
dd951876
JB
131### Fixed
132
133- Fix queued tasks rescheduling.
134
ff3f866a
JB
135### Changed
136
137- Rename tasks queue options `queueMaxSize` to `size`.
138
a6b3272b 139### Added
dd951876 140
a6b3272b 141- Task stealing scheduling algorithm if tasks queueing is enabled.
dd951876 142
c55c9b5d
JB
143## [2.6.32] - 2023-08-23
144
15b176e0
JB
145### Fixed
146
147- Ensure no task can be executed when the pool is destroyed.
148
20c6f652
JB
149### Added
150
151- Add `queueMaxSize` option to tasks queue options.
574b351d 152- Add O(1) deque implementation implemented with doubly linked list and use it for tasks queueing.
72695f86 153- Add tasks stealing algorithm when a worker node queue is back pressured if tasks queueing is enabled.
20c6f652 154
e560a9f2
JB
155## [2.6.31] - 2023-08-20
156
b1aae695
JB
157### Fixed
158
3e8611a8 159- Fix worker choice strategy retries mechanism in some edge cases.
b1aae695 160
94407def
JB
161### Changed
162
e695d66f 163- Make orthogonal worker choice strategies tasks distribution and created dynamic worker usage.
a71b05bc 164- Remove the experimental status of the `LEAST_ELU` worker choice strategy.
94407def 165
962b9863
JB
166## [2.6.30] - 2023-08-19
167
33e6bb4c
JB
168### Fixed
169
170- Ensure pool event `backPressure` is emitted.
171- Ensure pool event `full` is emitted only once.
8735b4e5 172- Ensure worker node cannot be instantiated without proper arguments.
33e6bb4c 173
8cc4ea81
JB
174## [2.6.29] - 2023-08-18
175
6169563b
JB
176### Fixed
177
178- Fix race condition between ready and task functions worker message handling at startup.
5dd4043c 179- Fix duplicate task function worker usage statistics computation per task function.
db0e38ee 180- Update task function worker usage statistics if and only if there's at least two different task functions.
5bb5be17 181- Fix race condition at task function worker usage executing task computation leading to negative value.
6169563b 182
8990357d
JB
183### Added
184
445264e8 185- 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
186- Use back pressure detection in worker choice strategies.
187- Add worker choice strategies retries mechanism if no worker is eligible.
188
21157987
JB
189## [2.6.28] - 2023-08-16
190
f05ed93c
JB
191### Fixed
192
193- Ensure pool workers are properly initialized.
194
12d67776
JB
195### Added
196
197- HTTP server pool examples: express-cluster, express-hybrid.
198
d18fccb1
JB
199### Changed
200
201- Remove now useless branching in worker hot code path.
202
741cdb34
JB
203## [2.6.27] - 2023-08-15
204
50e7f498
JB
205### Fixed
206
207- Add `KillHandler` type definition to exported types.
208
ef3891a3
JB
209### Added
210
211- Add `destroy` event to pool API.
212
e9dc6efa
JB
213## [2.6.26] - 2023-08-15
214
2b099bf7
JB
215### Added
216
217- Add kill handler to worker options allowing to execute custom code when worker is killed.
ef3891a3 218- Add `listTaskFunctions()` method to pool API.
1f4553c6 219- SMTP client pool example: nodemailer.
2b099bf7 220
5b726f72
JB
221## [2.6.25] - 2023-08-13
222
72855e92
JB
223### Added
224
3b311539 225- HTTP server pool examples: fastify-cluster, fastify-hybrid.
02999424 226- WebSocket server pool examples: ws-cluster, ws-hybrid.
72855e92 227
7aadd6e5
JB
228## [2.6.24] - 2023-08-12
229
7d91a8cd
JB
230### Added
231
232- Add array of transferable objects to the `execute()` method arguments.
02999424 233- WebSocket server pool examples: ws-worker_threads.
7d91a8cd 234
6b4263b4
JB
235## [2.6.23] - 2023-08-11
236
3d76750a 237### Fixed
8e0af894 238
3d76750a 239- 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 240
3d76750a
JB
241### Added
242
243- HTTP client pool examples: fetch, node-fetch and axios with multiple task functions.
02999424 244- HTTP server pool examples: express-worker_threads, fastify-worker_threads.
3d76750a
JB
245
246## [2.6.22] - 2023-08-10
9606b474 247
3d76750a 248### Fixed
9606b474
JB
249
250- Add missing `types` field to package.json `exports`.
251
3d76750a
JB
252### Changed
253
254- Structure markdown documentation (PR #811).
255
d9647bdd
JB
256## [2.6.21] - 2023-08-03
257
2111ec12
JB
258### Changed
259
260- Improve code documentation.
261- Code refactoring and cleanup for better maintainability and readability.
262
5c30b9d9
JB
263## [2.6.20] - 2023-07-21
264
10ecf8fd
JB
265### Fixed
266
267- Fix queued tasks redistribution on error task execution starvation.
a1763c54 268- Ensure tasks queueing per worker condition is untangled from the pool busyness semantic.
10ecf8fd 269
aa9eede8
JB
270### Changed
271
7c89e6a4 272- Drastically reduce lookups by worker in the worker nodes.
aa9eede8 273
62485908
JB
274## [2.6.19] - 2023-07-20
275
2e2ef9c3
JB
276### Added
277
278- Dedicated internal communication channel for worker_threads pools.
279
8f4c9491
JB
280## [2.6.18] - 2023-07-19
281
8660b972
JB
282### Changed
283
284- Code refactoring and cleanup for better maintainability and readability. Bundle size is a bit smaller.
285
206a3519
JB
286## [2.6.17] - 2023-07-16
287
b4899fae
JB
288### Added
289
1a3e01ba 290- Add `listTaskFunctions()` method to worker API.
b4899fae 291
58a06a6c
JB
292## [2.6.16] - 2023-07-12
293
2a69b8c5
JB
294### Fixed
295
80520ca4 296- Fix pool startup detection.
2a69b8c5
JB
297- Fix worker task functions handling.
298
b5900b02
JB
299## [2.6.15] - 2023-07-11
300
19dbc45b
JB
301### Added
302
303- Take into account worker node readiness in worker choice strategies.
304
4a0db581
JB
305## [2.6.14] - 2023-07-10
306
87e44747
JB
307### Fixed
308
309- Fix task function statistics tracking.
310
0265272f
JB
311## [2.6.13] - 2023-07-10
312
968a2e8c
JB
313### Added
314
315- Add per task function statistics tracking.
782299f8 316- Add public methods to manipulate the worker task functions at runtime.
968a2e8c 317
44c8c00f
JB
318## [2.6.12] - 2023-07-09
319
aa4bf4b2
JB
320### Fixed
321
322- Workaround import issue with `node:os` module in node 16.x.x.
323
b7cfced1
JB
324## [2.6.11] - 2023-07-09
325
d5024c00
JB
326### Fixed
327
328- Fix pool readiness semantic.
329
f313a208
JB
330## [2.6.10] - 2023-07-08
331
2431bdb4
JB
332### Fixed
333
334- Ensure workers are not recreated on error at pool startup.
335
336### Added
337
338- Add `ready` and `strategy` fields to pool information.
339- 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 340- Add dynamic pool sizing checks.
2431bdb4 341
369d0a51
JB
342## [2.6.9] - 2023-07-07
343
2845f2a5
JB
344### Fixed
345
346- Recreate the right worker type on uncaught exception.
347
348### Added
349
350- Add minimum and maximum to internal measurement statistics.
1dcf8b7b 351- Add `runTime` and `waitTime` to pool information.
75d3401a 352- Check worker inactive time only on dynamic worker.
2845f2a5 353
fc97d613
JB
354## [2.6.8] - 2023-07-03
355
92b1feaa
JB
356### Fixed
357
358- Brown paper bag release to fix version handling in pool information.
359
52d54060
JB
360## [2.6.7] - 2023-07-03
361
5bc91f3e
JB
362### Fixed
363
364- Ensure worker queued tasks at error are reassigned to other pool workers.
365
afe0d5bf
JB
366### Added
367
368- Add pool `utilization` ratio to pool information.
23ccf9d7 369- Add `version` to pool information.
e5b3047d 370- Add worker information to worker nodes.
afe0d5bf 371
f42c583f
JB
372## [2.6.6] - 2023-07-01
373
6961ca9a
JB
374### Added
375
d5e3c4ff 376- Add safe helper `availableParallelism()` to help sizing the pool.
6961ca9a 377
3749facb
JB
378### Fixed
379
380- Ensure message handler is only registered in worker.
381
6fed2513
JB
382## [2.6.5] - 2023-06-27
383
c72f6987
JB
384### Known issues
385
70726c28 386- Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
c72f6987
JB
387
388### Fixed
389
390- Artificial version bump to 2.6.5 to workaround publication issue.
d5e3c4ff 391- Ensure cluster pool `destroy()` gracefully shutdowns worker's server.
c72f6987
JB
392- Ensure pool event is emitted before task error promise rejection.
393- Fix queued tasks count computation.
394
395### Removed
396
2fbe1783 397- Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC.
c72f6987 398
6426631b
JB
399## [2.6.4] - 2023-06-27
400
941f9a7c
JB
401### Known issues
402
70726c28 403- Cluster pools tasks execution are not working by using ESM files extension: https://github.com/poolifier/poolifier/issues/782
941f9a7c 404
2c039e43
JB
405### Fixed
406
d5e3c4ff 407- Ensure cluster pool `destroy()` gracefully shutdowns worker's server.
2c039e43 408- Ensure pool event is emitted before task error promise rejection.
9c16fb4b 409- Fix queued tasks count computation.
2c039e43 410
941f9a7c
JB
411### Removed
412
2fbe1783 413- Remove unneeded worker_threads worker `MessageChannel` internal usage for IPC.
941f9a7c 414
bc1b0765
JB
415## [2.6.3] - 2023-06-19
416
a6a2dc4c
JB
417### Fixed
418
419- Ensure no tasks are queued when trying to soft kill a dynamic worker.
f0d7f803 420- Update strategies internals after statistics computation.
a6a2dc4c 421
7b56f532
JB
422### Changed
423
424- Optimize O(1) queue implementation.
425
b628596c
JB
426## [2.6.2] - 2023-06-12
427
a9e89d00
JB
428### Fixed
429
430- Fix new worker use after creation in dynamic pool given the current worker choice strategy.
431
4368a898
JB
432## [2.6.1] - 2023-06-10
433
931d43e2
JB
434### Added
435
13ab5b87 436- Add worker choice strategy documentation: [README.md](./docs/worker-choice-strategies.md).
931d43e2 437
f1c06930
JB
438### Fixed
439
440- Fix average statistics computation: ensure failed tasks are not accounted.
441
16671b07
JB
442## [2.6.0] - 2023-06-09
443
a1347286
JB
444### Added
445
5af9c0f7 446- Add `LEAST_ELU` worker choice strategy (experimental).
9adcefab 447- Add tasks ELU instead of runtime support to `FAIR_SHARE` worker choice strategy.
a1347286 448
1c6fe997
JB
449### Changed
450
451- Refactor pool worker node usage internals.
477f48e7 452- Breaking change: refactor worker choice strategy statistics requirements: the syntax of the worker choice strategy options has changed.
f63a9dda 453- Breaking change: pool information `info` property object fields have been renamed.
1c6fe997
JB
454
455### Fixed
456
457- Fix wait time accounting.
458- Ensure worker choice strategy `LEAST_BUSY` accounts also tasks wait time.
459- Ensure worker choice strategy `LEAST_USED` accounts also queued tasks.
460
aa07d6ee
JB
461## [2.5.4] - 2023-06-07
462
b6b32453
JB
463### Added
464
465- Add Event Loop Utilization (ELU) statistics to worker tasks usage.
466
467### Changed
468
469- Compute statistics at the worker level only if needed.
2fbe1783 470- Add `worker_threads` options to thread pool options.
b6b32453 471
272d4d8f
JB
472### Fixed
473
474- Make the `LEAST_BUSY` strategy only relies on task runtime.
475
ed47fb3d
JB
476## [2.5.3] - 2023-06-04
477
89a4abfd
JB
478### Changed
479
480- Refine pool information content.
b4213b7f 481- Limit pool internals public exposure.
89a4abfd 482
8a9febf5
JB
483## [2.5.2] - 2023-06-02
484
91ee39ed
JB
485### Added
486
487- Add `taskError` pool event for task execution error.
6b27d407 488- Add pool information `info` property to pool.
91ee39ed
JB
489- Emit pool information on `busy` and `full` pool events.
490
8babb151
JB
491## [2.5.1] - 2023-06-01
492
0e05c4dc
JB
493### Added
494
1f68cede 495- Add pool option `restartWorkerOnError` to restart worker on uncaught error. Default to `true`.
91ee39ed 496- Add `error` pool event for uncaught worker error.
0e05c4dc 497
a8766181
JB
498## [2.5.0] - 2023-05-31
499
e4543b14
JB
500### Added
501
502- Switch pool event emitter to `EventEmitterAsyncResource`.
6da80d38 503- Add tasks wait time accounting in per worker tasks usage.
5af9c0f7 504- Add interleaved weighted round robin `INTERLEAVED_WEIGHTED_ROUND_ROBIN` worker choice strategy (experimental).
e4543b14
JB
505
506### Changed
507
508- Renamed worker choice strategy `LESS_BUSY` to `LEAST_BUSY` and `LESS_USED` to `LEAST_USED`.
509
570efb11
JB
510## [2.4.14] - 2023-05-09
511
b0f28bad
JB
512### Fixed
513
514- Ensure no undefined task runtime can land in the tasks history.
515- Fix median computation implementation once again.
516
110b6d13
JB
517### Added
518
519- Unit tests for median and queue implementations.
520
72584880
JB
521## [2.4.13] - 2023-05-08
522
b0d6ed8f
JB
523### Fixed
524
e3058615 525- Fix worker choice strategy options validation.
b0d6ed8f
JB
526- Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.
527
06140c32
JB
528## [2.4.12] - 2023-05-06
529
a86b6df1
JB
530### Added
531
532- Support multiple task functions per worker.
08f3f44c 533- Add custom worker weights support to worker choice strategies options.
a86b6df1 534
29ee7e9a
JB
535### Changed
536
537- Use O(1) queue implementation for tasks queueing.
538
0682ba15
JB
539### Fixed
540
541- Fix median computation implementation.
542- Fix fair share worker choice strategy internals update.
543
936d53ec
JB
544## [2.4.11] - 2023-04-23
545
cb70b19d
JB
546### Changed
547
548- Optimize free worker finding in worker choice strategies.
549
15bb637a
JB
550## [2.4.10] - 2023-04-15
551
ef41a6e6
JB
552### Fixed
553
82ea6492 554- Fix typescript type definition for task function: ensure the input data is optional.
ef41a6e6
JB
555- Fix typescript type definition for pool execute(): ensure the input data is optional.
556
181eb2b4
JB
557## [2.4.9] - 2023-04-15
558
a20f0ba5
JB
559### Added
560
561- Add tasks queue enablement runtime setter to pool.
562- Add tasks queue options runtime setter to pool.
563- Add worker choice strategy options runtime setter to pool.
564
565### Changed
566
567- Remove the tasks queuing experimental status.
568
d4aeae5a
JB
569### Fixed
570
82ea6492 571- Fix task function type definition and validation.
2fc5cae3 572- Fix worker choice strategy options handling.
d4aeae5a 573
1d9e7023
JB
574## [2.4.8] - 2023-04-12
575
f9b4bbf8
JB
576### Fixed
577
578- Fix message between main worker and worker type definition for tasks.
579- Fix code documentation.
580
12ae3210
JB
581## [2.4.7] - 2023-04-11
582
7171d33f
JB
583### Added
584
585- Add worker tasks queue options to pool options.
586
e8bd29ce
JB
587### Fixed
588
589- Fix missing documentation.
590
42c7bc10
JB
591## [2.4.6] - 2023-04-10
592
681196cc
JB
593### Fixed
594
595- Ensure one task at a time is executed per worker with tasks queueing enabled.
1c6fe997 596- Properly count worker executing tasks with tasks queueing enabled.
681196cc 597
54d360e3
JB
598## [2.4.5] - 2023-04-09
599
3fafb1b2
JB
600### Added
601
9e775f96
JB
602- Use monotonic high resolution timer for worker tasks runtime.
603- Add worker tasks median runtime to statistics.
ff733df7 604- Add worker tasks queue (experimental).
3fafb1b2 605
92fa3eb6
JB
606## [2.4.4] - 2023-04-07
607
aee46736
JB
608### Added
609
610- Add `PoolEvents` enumeration and `PoolEvent` type.
611
36b5e78f
JB
612### Fixed
613
ff0c2b3e 614- Destroy worker only on alive check.
36b5e78f 615
9fb0f324
JB
616## [2.4.3] - 2023-04-07
617
28cf3617
JB
618### Fixed
619
620- Fix typedoc generation with inheritance.
621
848f0f27
JB
622## [2.4.2] - 2023-04-06
623
164d950a
JB
624### Added
625
626- Add `full` event to dynamic pool.
32417142 627- Keep worker choice strategy in memory for conditional reuse.
164d950a 628
78ab2555
JB
629### Fixed
630
631- Fix possible negative worker key at worker removal in worker choice strategies.
632
79aafe9f
JB
633## [2.4.1] - 2023-04-05
634
9cd39dd4
JB
635### Changed
636
637- Optimize worker choice strategy for dynamic pool.
638
965415bb
JB
639### Fixed
640
641- Ensure dynamic pool does not alter worker choice strategy expected behavior.
642
d8b60b1c
JB
643## [2.4.0] - 2023-04-04
644
c6bd2650
JB
645### Added
646
647- Add `LESS_BUSY` worker choice strategy.
648
649### Changed
650
651- Optimize worker storage in pool.
652- Optimize worker alive status check.
653- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
654- Optimize `LESS_USED` worker choice strategy.
2a87030e 655- Update benchmark versus external threads pools.
c6bd2650
JB
656- Optimize tasks usage statistics requirements for worker choice strategy.
657
658### Fixed
659
660- Ensure trimmable characters are checked at pool initialization.
661- Fix message id integer overflow.
662- Fix pool worker removal in worker choice strategy internals.
663- Fix package publication with pnpm.
664
d0a3f018
JB
665## [2.4.0-3] - 2023-04-04
666
b2ede285
JB
667### Added
668
669- Add `LESS_BUSY` worker choice strategy.
670
671### Changed
672
673- Optimize worker storage in pool.
674- Optimize worker alive status check.
675- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
676- Optimize `LESS_USED` worker choice strategy.
2a87030e 677- Update benchmark versus external threads pools.
b2ede285
JB
678
679### Fixed
680
681- Ensure trimmable characters are checked at pool initialization.
682- Fix message id integer overflow.
683- Fix pool worker removal in worker choice strategy internals.
684- Fix package publication with pnpm.
685
a015ea40
JB
686## [2.4.0-2] - 2023-04-03
687
698f4bbc
JB
688### Added
689
690- Add `LESS_BUSY` worker choice strategy.
691
692### Changed
693
694- Optimize worker storage in pool.
695- Optimize worker alive status check.
696- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
697- Optimize `LESS_USED` worker choice strategy.
698
699### Fixed
700
701- Ensure trimmable characters are checked at pool initialization.
702- Fix message id integer overflow.
703- Fix pool worker removal in worker choice strategy internals.
704- Fix package publication with pnpm.
705
8fe15920
JB
706## [2.4.0-1] - 2023-04-03
707
5b301c28
JB
708### Added
709
710- Add `LESS_BUSY` worker choice strategy.
711
712### Changed
713
714- Optimize worker storage in pool.
715- Optimize worker alive status check.
716- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
717- Optimize `LESS_USED` worker choice strategy.
718
719### Fixed
720
721- Ensure trimmable characters are checked at pool initialization.
722- Fix message id integer overflow.
723- Fix pool worker removal in worker choice strategy internals.
724
2fb9ca9c
JB
725## [2.4.0-0] - 2023-04-03
726
168c526f
JB
727### Added
728
729- Add `LESS_BUSY` worker choice strategy.
730
1d71a908
JB
731### Changed
732
ffcbbad8 733- Optimize worker storage in pool.
1d71a908 734- Optimize worker alive status check.
65a60b3b 735- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
737c6d97 736- Optimize `LESS_USED` worker choice strategy.
1d71a908 737
ffcbbad8
JB
738### Fixed
739
740- Ensure trimmable characters are checked at pool initialization.
b4e75778 741- Fix message id integer overflow.
97a2abc3 742- Fix pool worker removal in worker choice strategy internals.
ffcbbad8 743
08372738
JB
744## [2.3.10] - 2023-03-18
745
710826bc
JB
746### Fixed
747
9606b474 748- Fix package.json `exports` syntax for ESM and CommonJS.
710826bc
JB
749
750### Changed
751
752- Permit SemVer pre-release publication.
76e5ac6f 753
e4796ecd
JB
754## [2.3.10-2] - 2023-03-18
755
6abad580
JB
756### Fixed
757
9606b474 758- Fix package.json `exports` syntax for ESM and CommonJS.
6abad580 759
a2ee98cc
JB
760## [2.3.10-1] - 2023-03-18
761
7e060cee
JB
762### Changed
763
90483887 764- Permit SemVer pre-release publication.
7e060cee 765
c81bfafb
JB
766## [2.3.10-0] - 2023-03-18
767
fe18768d
JB
768### Fixed
769
9606b474 770- Fix package.json `exports` syntax for ESM and CommonJS.
fe18768d 771
d7b78217
JB
772## [2.3.9] - 2023-03-18
773
ed6dd37f
JB
774### Changed
775
776- Introduce ESM module support along with CommonJS one.
777
778### Fixed
779
780- Fix brown paper bag bug referencing the same object literal.
781
68e2ad86
JB
782## [2.3.8] - 2023-03-18
783
ca6c7d70
JB
784### Changed
785
786- Switch internal benchmarking code to benny.
fbdedeb9
JB
787- Switch to TypeScript 5.x.x.
788- Switch rollup bundler plugins to core ones.
ed6dd37f 789- Switch to TSDoc syntax.
fbdedeb9 790- Enforce conventional commits.
ca6c7d70 791
d15211d4
JB
792### Fixed
793
794- Fix random integer generator.
fbdedeb9 795- Fix worker choice strategy pool type identification at initialization.
d15211d4 796
995705ea
JB
797## [2.3.7] - 2022-10-23
798
b953022b
JB
799### Changed
800
801- Switch to open collective FOSS project funding platform.
78cea37e
JB
802- Switch to ts-standard linter configuration on TypeScript code.
803
804### Fixed
805
806- Fixed missing async on pool execute method.
807- Fixed typing in TypeScript example.
808- Fixed types in unit tests.
b953022b 809
3b9f6953
JB
810## [2.3.6] - 2022-10-22
811
f80cead4
JB
812### Changed
813
814- Cleanup pool attributes and methods.
815- Refine error types thrown.
816
817### Fixed
818
819- Fix continuous integration build on windows.
820- Fix code coverage reporting by using c8 instead of nyc.
821
efc22107
JB
822## [2.3.5] - 2022-10-21
823
7a6a0a96
JB
824### Changed
825
a05c10de
JB
826- Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
827- Optimize tasks usage lookup implementation.
7a6a0a96 828
b4904890
JB
829### Fixed
830
831- Fix missed pool event emitter type export.
832- Fix typedoc documentation generation.
833
a875f8d1
JB
834## [2.3.4] - 2022-10-17
835
73cda448
JB
836### Added
837
838- Fully automate release process with release-it.
839
45a5a54c
JB
840### Changed
841
73cda448 842- Optimize fair share task scheduling algorithm implementation.
2a87030e 843- Update benchmark versus external pools results with latest version.
45a5a54c 844
90ee1b18 845## [2.3.3] - 2022-10-15
1a76932b
JB
846
847### Added
848
849- Add support for [cluster settings](https://nodejs.org/api/cluster.html#cluster_cluster_settings) in cluster pool options.
850
90ee1b18 851## [2.3.2] - 2022-10-14
11df3590
JB
852
853### Changed
854
855- Optimize fair share worker selection strategy implementation.
856
857### Fixed
858
859- Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.
860
90ee1b18 861## [2.3.1] - 2022-10-13
23ff945a
JB
862
863### Added
864
865- Pool worker choice strategies:
866 - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN` strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
867 - `WorkerChoiceStrategies.FAIR_SHARE` strategy based on fair share scheduling algorithm using tasks execution time for now.
868
90ee1b18 869## [2.2.2] - 2022-10-09
cb2b6c69
JB
870
871### Fixed
872
873- Fixed `README.md` file.
874
90ee1b18 875## [2.2.1] - 2022-10-08
bdacc2d2 876
bdaf31cd
JB
877### Added
878
879- Dynamic worker choice strategy change at runtime.
bdacc2d2 880
90ee1b18 881## [2.2.0] - 2022-01-05
7e0d447f
JB
882
883### Breaking Changes
884
9606b474 885- Support only Node.js version 16.x.x for cluster pool: upstream cluster API have changed on that version.
7e0d447f 886
90ee1b18 887## [2.1.0] - 2021-08-29
35cf1c03
JB
888
889### Added
890
891- Add an optional pool option `messageHandler` to `PoolOptions<Worker>` for registering a message handler callback on each worker.
e088a00c
JB
892
893### Breaking Changes
894
895- `AbstractWorker` class `maxInactiveTime`, `killBehavior` and `async` attributes have been removed in favour of the same ones in the worker options `opts` public attribute.
896- `AbstractWorker` class `lastTask` attribute have been renamed to `lastTaskTimestamp`.
897- `AbstractWorker` class `interval` attribute have been renamed to `aliveInterval`.
c365b2d3 898- `AbstractWorker` class cannot be instantiated without specifying the `mainWorker` argument referencing the main worker.
e088a00c 899
90ee1b18 900## [2.0.2] - 2021-05-12
14916bf9
JB
901
902### Bug fixes
903
904- Fix `busy` event emission on fixed pool type
905
90ee1b18 906## [2.0.1] - 2021-03-16
7f685093
JB
907
908### Bug fixes
909
910- Check if pool options are properly set.
911- `busy` event is emitted on all pool types.
912
90ee1b18 913## [2.0.0] - 2021-03-01
fa0f5b28 914
f3f833ab 915### Bug fixes
d63d3be3 916
ddbeaffd 917- Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).
d63d3be3 918
fa0f5b28
S
919### Breaking Changes
920
7f685093 921- `FullPool` event is now renamed to `busy`.
1927ee67 922- `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
1a81f8af 923 _Find more details on our JSDoc._
ddbeaffd 924
1927ee67
APA
925- `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
926
ddbeaffd 927- We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
fa0f5b28 928
ec2ccfc8
JB
929### Pool options types declaration merge
930
931`FixedThreadPoolOptions` and `DynamicThreadPoolOptions` type declarations have been merged to `PoolOptions<Worker>`.
932
fa0f5b28
S
933#### New `export` strategy
934
935```js
936// Before
0eee77cb 937const DynamicThreadPool = require('poolifier/lib/dynamic')
fa0f5b28 938// After
0eee77cb 939const { DynamicThreadPool } = require('poolifier/lib/dynamic')
fa0f5b28
S
940```
941
942But you should always prefer just using
943
944```js
0eee77cb 945const { DynamicThreadPool } = require('poolifier')
fa0f5b28
S
946```
947
d3c8a1a8
S
948#### New type definitions for input data and response
949
6677a3d3 950For cluster worker and worker-thread pools, you can now only send and receive structured-cloneable data.
9606b474 951_This is not a limitation by poolifier but Node.js._
d3c8a1a8 952
3a4b605f 953#### Public property replacements
5c5a1fb7 954
3a4b605f 955`numWorkers` property is now `numberOfWorkers`
5c5a1fb7 956
280c2a77 957#### Internal (protected) properties and methods renaming
fa0f5b28 958
280c2a77
S
959These properties are not intended for end users
960
961- `id` => `nextMessageId`
962
963These methods are not intended for end users
fa0f5b28
S
964
965- `_chooseWorker` => `chooseWorker`
280c2a77 966- `_newWorker` => `createWorker`
fa0f5b28
S
967- `_execute` => `internalExecute`
968- `_chooseWorker` => `chooseWorker`
969- `_checkAlive` => `checkAlive`
970- `_run` => `run`
971- `_runAsync` => `runAsync`
972
90ee1b18 973## [1.1.0] - 2020-05-21
0312f71a
APA
974
975### Added
976
977- ThreadWorker support async functions as option
cf9aa6c3 978- Various external library patches
0312f71a 979
90ee1b18 980## [1.0.0] - 2020-01-24
522eea03 981
982### Added
983
984- FixedThreadPool implementation
985- DynamicThreadPool implementation
0312f71a 986- WorkerThread implementation to improve developer experience