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