test: add queue tests
[poolifier.git] / CHANGELOG.md
... / ...
CommitLineData
1# Changelog
2
3All notable changes to this project will be documented in this file.
4
5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
8## [Unreleased]
9
10## [2.4.13] - 2023-05-08
11
12### Fixed
13
14- Fix worker choice strategy options validation.
15- Fix fair share worker choice strategy internals update: ensure virtual task end timestamp is computed at task submission.
16
17## [2.4.12] - 2023-05-06
18
19### Added
20
21- Support multiple task functions per worker.
22- Add custom worker weights support to worker choice strategies options.
23
24### Changed
25
26- Use O(1) queue implementation for tasks queueing.
27
28### Fixed
29
30- Fix median computation implementation.
31- Fix fair share worker choice strategy internals update.
32
33## [2.4.11] - 2023-04-23
34
35### Changed
36
37- Optimize free worker finding in worker choice strategies.
38
39## [2.4.10] - 2023-04-15
40
41### Fixed
42
43- Fix typescript type definition for worker function: ensure the input data is optional.
44- Fix typescript type definition for pool execute(): ensure the input data is optional.
45
46## [2.4.9] - 2023-04-15
47
48### Added
49
50- Add tasks queue enablement runtime setter to pool.
51- Add tasks queue options runtime setter to pool.
52- Add worker choice strategy options runtime setter to pool.
53
54### Changed
55
56- Remove the tasks queuing experimental status.
57
58### Fixed
59
60- Fix worker function type definition and validation.
61- Fix worker choice strategy options handling.
62
63## [2.4.8] - 2023-04-12
64
65### Fixed
66
67- Fix message between main worker and worker type definition for tasks.
68- Fix code documentation.
69
70## [2.4.7] - 2023-04-11
71
72### Added
73
74- Add worker tasks queue options to pool options.
75
76### Fixed
77
78- Fix missing documentation.
79
80## [2.4.6] - 2023-04-10
81
82### Fixed
83
84- Ensure one task at a time is executed per worker with tasks queueing enabled.
85- Properly count worker running tasks with tasks queueing enabled.
86
87## [2.4.5] - 2023-04-09
88
89### Added
90
91- Use monotonic high resolution timer for worker tasks run time.
92- Add worker tasks median run time to statistics.
93- Add worker tasks queue (experimental).
94
95## [2.4.4] - 2023-04-07
96
97### Added
98
99- Add `PoolEvents` enumeration and `PoolEvent` type.
100
101### Fixed
102
103- Destroy worker only on alive check.
104
105## [2.4.3] - 2023-04-07
106
107### Fixed
108
109- Fix typedoc generation with inheritance.
110
111## [2.4.2] - 2023-04-06
112
113### Added
114
115- Add `full` event to dynamic pool.
116- Keep worker choice strategy in memory for conditional reuse.
117
118### Fixed
119
120- Fix possible negative worker key at worker removal in worker choice strategies.
121
122## [2.4.1] - 2023-04-05
123
124### Changed
125
126- Optimize worker choice strategy for dynamic pool.
127
128### Fixed
129
130- Ensure dynamic pool does not alter worker choice strategy expected behavior.
131
132## [2.4.0] - 2023-04-04
133
134### Added
135
136- Add `LESS_BUSY` worker choice strategy.
137
138### Changed
139
140- Optimize worker storage in pool.
141- Optimize worker alive status check.
142- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
143- Optimize `LESS_USED` worker choice strategy.
144- Update benchmarks versus external threads pools.
145- Optimize tasks usage statistics requirements for worker choice strategy.
146
147### Fixed
148
149- Ensure trimmable characters are checked at pool initialization.
150- Fix message id integer overflow.
151- Fix pool worker removal in worker choice strategy internals.
152- Fix package publication with pnpm.
153
154## [2.4.0-3] - 2023-04-04
155
156### Added
157
158- Add `LESS_BUSY` worker choice strategy.
159
160### Changed
161
162- Optimize worker storage in pool.
163- Optimize worker alive status check.
164- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
165- Optimize `LESS_USED` worker choice strategy.
166- Update benchmarks versus external threads pools.
167
168### Fixed
169
170- Ensure trimmable characters are checked at pool initialization.
171- Fix message id integer overflow.
172- Fix pool worker removal in worker choice strategy internals.
173- Fix package publication with pnpm.
174
175## [2.4.0-2] - 2023-04-03
176
177### Added
178
179- Add `LESS_BUSY` worker choice strategy.
180
181### Changed
182
183- Optimize worker storage in pool.
184- Optimize worker alive status check.
185- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
186- Optimize `LESS_USED` worker choice strategy.
187
188### Fixed
189
190- Ensure trimmable characters are checked at pool initialization.
191- Fix message id integer overflow.
192- Fix pool worker removal in worker choice strategy internals.
193- Fix package publication with pnpm.
194
195## [2.4.0-1] - 2023-04-03
196
197### Added
198
199- Add `LESS_BUSY` worker choice strategy.
200
201### Changed
202
203- Optimize worker storage in pool.
204- Optimize worker alive status check.
205- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
206- Optimize `LESS_USED` worker choice strategy.
207
208### Fixed
209
210- Ensure trimmable characters are checked at pool initialization.
211- Fix message id integer overflow.
212- Fix pool worker removal in worker choice strategy internals.
213
214## [2.4.0-0] - 2023-04-03
215
216### Added
217
218- Add `LESS_BUSY` worker choice strategy.
219
220### Changed
221
222- Optimize worker storage in pool.
223- Optimize worker alive status check.
224- BREAKING CHANGE: Rename worker choice strategy `LESS_RECENTLY_USED` to `LESS_USED`.
225- Optimize `LESS_USED` worker choice strategy.
226
227### Fixed
228
229- Ensure trimmable characters are checked at pool initialization.
230- Fix message id integer overflow.
231- Fix pool worker removal in worker choice strategy internals.
232
233## [2.3.10] - 2023-03-18
234
235### Fixed
236
237- Fix `exports` syntax for ESM and CommonJS.
238
239### Changed
240
241- Permit SemVer pre-release publication.
242
243## [2.3.10-2] - 2023-03-18
244
245### Fixed
246
247- Fix `exports` syntax for ESM and CommonJS.
248
249## [2.3.10-1] - 2023-03-18
250
251### Changed
252
253- Permit SemVer pre-release publication.
254
255## [2.3.10-0] - 2023-03-18
256
257### Fixed
258
259- Fix `exports` syntax for ESM and CommonJS.
260
261## [2.3.9] - 2023-03-18
262
263### Changed
264
265- Introduce ESM module support along with CommonJS one.
266
267### Fixed
268
269- Fix brown paper bag bug referencing the same object literal.
270
271## [2.3.8] - 2023-03-18
272
273### Changed
274
275- Switch internal benchmarking code to benny.
276- Switch to TypeScript 5.x.x.
277- Switch rollup bundler plugins to core ones.
278- Switch to TSDoc syntax.
279- Enforce conventional commits.
280
281### Fixed
282
283- Fix random integer generator.
284- Fix worker choice strategy pool type identification at initialization.
285
286## [2.3.7] - 2022-10-23
287
288### Changed
289
290- Switch to open collective FOSS project funding platform.
291- Switch to ts-standard linter configuration on TypeScript code.
292
293### Fixed
294
295- Fixed missing async on pool execute method.
296- Fixed typing in TypeScript example.
297- Fixed types in unit tests.
298
299## [2.3.6] - 2022-10-22
300
301### Changed
302
303- Cleanup pool attributes and methods.
304- Refine error types thrown.
305
306### Fixed
307
308- Fix continuous integration build on windows.
309- Fix code coverage reporting by using c8 instead of nyc.
310
311## [2.3.5] - 2022-10-21
312
313### Changed
314
315- Improve benchmarks: add IO intensive task workload, add task size option, integrate code into linter.
316- Optimize tasks usage lookup implementation.
317
318### Fixed
319
320- Fix missed pool event emitter type export.
321- Fix typedoc documentation generation.
322
323## [2.3.4] - 2022-10-17
324
325### Added
326
327- Fully automate release process with release-it.
328
329### Changed
330
331- Optimize fair share task scheduling algorithm implementation.
332- Update benchmarks versus external pools results with latest version.
333
334## [2.3.3] - 2022-10-15
335
336### Added
337
338- Add support for [cluster settings](https://nodejs.org/api/cluster.html#cluster_cluster_settings) in cluster pool options.
339
340## [2.3.2] - 2022-10-14
341
342### Changed
343
344- Optimize fair share worker selection strategy implementation.
345
346### Fixed
347
348- Fix WRR worker selection strategy: ensure the condition triggering the round robin can be fulfilled.
349
350## [2.3.1] - 2022-10-13
351
352### Added
353
354- Pool worker choice strategies:
355 - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN` strategy based on weighted round robin scheduling algorithm using tasks execution time for now.
356 - `WorkerChoiceStrategies.FAIR_SHARE` strategy based on fair share scheduling algorithm using tasks execution time for now.
357
358## [2.2.2] - 2022-10-09
359
360### Fixed
361
362- Fixed `README.md` file.
363
364## [2.2.1] - 2022-10-08
365
366### Added
367
368- Dynamic worker choice strategy change at runtime.
369
370## [2.2.0] - 2022-01-05
371
372### Breaking Changes
373
374- Support only NodeJS version 16.x.x for cluster pool: upstream cluster API have changed on that version.
375
376## [2.1.0] - 2021-08-29
377
378### Added
379
380- Add an optional pool option `messageHandler` to `PoolOptions<Worker>` for registering a message handler callback on each worker.
381
382### Breaking Changes
383
384- `AbstractWorker` class `maxInactiveTime`, `killBehavior` and `async` attributes have been removed in favour of the same ones in the worker options `opts` public attribute.
385- `AbstractWorker` class `lastTask` attribute have been renamed to `lastTaskTimestamp`.
386- `AbstractWorker` class `interval` attribute have been renamed to `aliveInterval`.
387- `AbstractWorker` class cannot be instantiated without specifying the `mainWorker` argument referencing the main worker.
388
389## [2.0.2] - 2021-05-12
390
391### Bug fixes
392
393- Fix `busy` event emission on fixed pool type
394
395## [2.0.1] - 2021-03-16
396
397### Bug fixes
398
399- Check if pool options are properly set.
400- `busy` event is emitted on all pool types.
401
402## [2.0.0] - 2021-03-01
403
404### Bug fixes
405
406- Now a thread/process by default is not deleted when the task submitted take more time than maxInactiveTime configured (issue #70).
407
408### Breaking Changes
409
410- `FullPool` event is now renamed to `busy`.
411- `maxInactiveTime` on `ThreadWorker` default behavior is now changed, if you want to keep the old behavior set `killBehavior` to `KillBehaviors.HARD`.
412 _Find more details on our JSDoc._
413
414- `maxTasks` option on `FixedThreadPool` and `DynamicThreadPool` is now removed since is no more needed.
415
416- We changed some internal structures, but you shouldn't be too affected by them as these are internal changes.
417
418### Pool options types declaration merge
419
420`FixedThreadPoolOptions` and `DynamicThreadPoolOptions` type declarations have been merged to `PoolOptions<Worker>`.
421
422#### New `export` strategy
423
424```js
425// Before
426const DynamicThreadPool = require('poolifier/lib/dynamic')
427// After
428const { DynamicThreadPool } = require('poolifier/lib/dynamic')
429```
430
431But you should always prefer just using
432
433```js
434const { DynamicThreadPool } = require('poolifier')
435```
436
437#### New type definitions for input data and response
438
439For cluster worker and worker-thread pools, you can now only send and receive serializable data.
440_This is not a limitation by poolifier but NodeJS._
441
442#### Public property replacements
443
444`numWorkers` property is now `numberOfWorkers`
445
446#### Internal (protected) properties and methods renaming
447
448These properties are not intended for end users
449
450- `id` => `nextMessageId`
451
452These methods are not intended for end users
453
454- `_chooseWorker` => `chooseWorker`
455- `_newWorker` => `createWorker`
456- `_execute` => `internalExecute`
457- `_chooseWorker` => `chooseWorker`
458- `_checkAlive` => `checkAlive`
459- `_run` => `run`
460- `_runAsync` => `runAsync`
461
462## [1.1.0] - 2020-05-21
463
464### Added
465
466- ThreadWorker support async functions as option
467- Various external library patches
468
469## [1.0.0] - 2020-01-24
470
471### Added
472
473- FixedThreadPool implementation
474- DynamicThreadPool implementation
475- WorkerThread implementation to improve developer experience