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