From 92daba400a9710d9a51af1c226f186e6fd2f8472 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 15 Nov 2024 15:29:14 +0100 Subject: [PATCH] docs: generate typedoc documentation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- .lintstagedrc.js | 4 +- docs/api.md | 14 +- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- docs/classes/AbstractPool.html | 164 ----------------- docs/classes/AbstractWorker.html | 80 -------- docs/classes/CircularBuffer.html | 24 --- docs/classes/ClusterWorker.html | 83 --------- docs/classes/DynamicClusterPool.html | 166 ----------------- docs/classes/DynamicThreadPool.html | 167 ----------------- docs/classes/FixedClusterPool.html | 164 ----------------- docs/classes/FixedThreadPool.html | 165 ----------------- docs/classes/PriorityQueue.html | 42 ----- docs/classes/ThreadWorker.html | 83 --------- .../WorkerChoiceStrategiesContext.html | 48 ----- docs/classes/src.AbstractPool.html | 164 +++++++++++++++++ docs/classes/src.AbstractWorker.html | 80 ++++++++ docs/classes/src.CircularBuffer.html | 24 +++ docs/classes/src.ClusterWorker.html | 83 +++++++++ docs/classes/src.DynamicClusterPool.html | 166 +++++++++++++++++ docs/classes/src.DynamicThreadPool.html | 167 +++++++++++++++++ docs/classes/src.FixedClusterPool.html | 164 +++++++++++++++++ docs/classes/src.FixedThreadPool.html | 165 +++++++++++++++++ docs/classes/src.PriorityQueue.html | 42 +++++ docs/classes/src.ThreadWorker.html | 83 +++++++++ .../src.WorkerChoiceStrategiesContext.html | 48 +++++ docs/documents/api.html | 174 ++++++++++++++++++ docs/documents/general_guidelines.html | 30 +++ docs/documents/worker_choice_strategies.html | 24 +++ docs/functions/availableParallelism.html | 4 - docs/functions/src.availableParallelism.html | 4 + docs/hierarchy.html | 2 +- docs/index.html | 73 +------- ...tLoopUtilizationMeasurementStatistics.html | 5 - docs/interfaces/FixedQueueNode.html | 5 - docs/interfaces/IFixedQueue.html | 34 ---- docs/interfaces/IPool.html | 80 -------- docs/interfaces/IWorkerChoiceStrategy.html | 25 --- docs/interfaces/MeasurementOptions.html | 4 - docs/interfaces/MeasurementStatistics.html | 14 -- .../MeasurementStatisticsRequirements.html | 8 - docs/interfaces/MessageValue.html | 52 ------ docs/interfaces/PoolInfo.html | 35 ---- docs/interfaces/PoolOptions.html | 50 ----- docs/interfaces/PromiseResponseWrapper.html | 11 -- docs/interfaces/StrategyData.html | 3 - docs/interfaces/StrategyPolicy.html | 6 - docs/interfaces/Task.html | 20 -- docs/interfaces/TaskFunctionObject.html | 10 - .../TaskFunctionOperationResult.html | 4 - docs/interfaces/TaskFunctionProperties.html | 8 - docs/interfaces/TaskPerformance.html | 10 - docs/interfaces/TaskStatistics.html | 16 -- .../TaskStatisticsRequirements.html | 8 - docs/interfaces/TasksQueueOptions.html | 32 ---- .../WorkerChoiceStrategyOptions.html | 25 --- docs/interfaces/WorkerError.html | 13 -- docs/interfaces/WorkerInfo.html | 27 --- docs/interfaces/WorkerNodeEventDetail.html | 4 - docs/interfaces/WorkerNodeOptions.html | 7 - docs/interfaces/WorkerOptions.html | 27 --- docs/interfaces/WorkerStatistics.html | 6 - docs/interfaces/WorkerUsage.html | 10 - ...tLoopUtilizationMeasurementStatistics.html | 5 + docs/interfaces/src.FixedQueueNode.html | 5 + docs/interfaces/src.IFixedQueue.html | 34 ++++ docs/interfaces/src.IPool.html | 80 ++++++++ .../{IWorker.html => src.IWorker.html} | 92 ++++----- .../interfaces/src.IWorkerChoiceStrategy.html | 25 +++ ...{IWorkerNode.html => src.IWorkerNode.html} | 150 +++++++-------- docs/interfaces/src.MeasurementOptions.html | 4 + .../interfaces/src.MeasurementStatistics.html | 14 ++ ...src.MeasurementStatisticsRequirements.html | 8 + docs/interfaces/src.MessageValue.html | 52 ++++++ docs/interfaces/src.PoolInfo.html | 35 ++++ docs/interfaces/src.PoolOptions.html | 50 +++++ .../src.PromiseResponseWrapper.html | 11 ++ docs/interfaces/src.StrategyData.html | 3 + docs/interfaces/src.StrategyPolicy.html | 6 + docs/interfaces/src.Task.html | 20 ++ docs/interfaces/src.TaskFunctionObject.html | 10 + .../src.TaskFunctionOperationResult.html | 4 + .../src.TaskFunctionProperties.html | 8 + docs/interfaces/src.TaskPerformance.html | 10 + docs/interfaces/src.TaskStatistics.html | 16 ++ .../src.TaskStatisticsRequirements.html | 8 + docs/interfaces/src.TasksQueueOptions.html | 32 ++++ .../src.WorkerChoiceStrategyOptions.html | 25 +++ docs/interfaces/src.WorkerError.html | 13 ++ docs/interfaces/src.WorkerInfo.html | 27 +++ .../interfaces/src.WorkerNodeEventDetail.html | 4 + docs/interfaces/src.WorkerNodeOptions.html | 7 + docs/interfaces/src.WorkerOptions.html | 27 +++ docs/interfaces/src.WorkerStatistics.html | 6 + docs/interfaces/src.WorkerUsage.html | 10 + docs/media/README.md | 29 +++ docs/modules/src.html | 70 +++++++ docs/types/ClusterPoolOptions.html | 2 - docs/types/ErrorHandler.html | 3 - docs/types/EventHandler.html | 3 - docs/types/ExitHandler.html | 3 - docs/types/KillBehavior.html | 2 - docs/types/KillHandler.html | 2 - docs/types/Measurement.html | 2 - docs/types/MessageHandler.html | 3 - docs/types/OnlineHandler.html | 3 - docs/types/PoolEvent.html | 2 - docs/types/PoolType.html | 2 - docs/types/TaskAsyncFunction.html | 7 - docs/types/TaskFunction.html | 5 - docs/types/TaskSyncFunction.html | 6 - docs/types/ThreadPoolOptions.html | 2 - docs/types/WorkerType.html | 2 - docs/types/Writable.html | 3 - ...ategy.html => src.ClusterPoolOptions.html} | 4 +- docs/types/src.ErrorHandler.html | 3 + docs/types/src.EventHandler.html | 3 + docs/types/src.ExitHandler.html | 3 + docs/types/src.KillBehavior.html | 2 + docs/types/src.KillHandler.html | 2 + docs/types/src.Measurement.html | 2 + docs/types/src.MessageHandler.html | 3 + docs/types/src.OnlineHandler.html | 3 + docs/types/src.PoolEvent.html | 2 + docs/types/src.PoolType.html | 2 + docs/types/src.TaskAsyncFunction.html | 7 + docs/types/src.TaskFunction.html | 5 + docs/types/src.TaskFunctions.html | 6 + docs/types/src.TaskSyncFunction.html | 6 + docs/types/src.ThreadPoolOptions.html | 2 + docs/types/src.WorkerChoiceStrategy.html | 2 + docs/types/src.WorkerType.html | 2 + docs/types/src.Writable.html | 3 + docs/variables/KillBehaviors.html | 2 - docs/variables/Measurements.html | 2 - docs/variables/PoolEvents.html | 2 - docs/variables/PoolTypes.html | 2 - docs/variables/WorkerChoiceStrategies.html | 2 - docs/variables/WorkerTypes.html | 2 - .../src.KillBehaviors.html} | 8 +- docs/variables/src.Measurements.html | 2 + docs/variables/src.PoolEvents.html | 2 + docs/variables/src.PoolTypes.html | 2 + .../variables/src.WorkerChoiceStrategies.html | 2 + docs/variables/src.WorkerTypes.html | 2 + 145 files changed, 2285 insertions(+), 2023 deletions(-) delete mode 100644 docs/classes/AbstractPool.html delete mode 100644 docs/classes/AbstractWorker.html delete mode 100644 docs/classes/CircularBuffer.html delete mode 100644 docs/classes/ClusterWorker.html delete mode 100644 docs/classes/DynamicClusterPool.html delete mode 100644 docs/classes/DynamicThreadPool.html delete mode 100644 docs/classes/FixedClusterPool.html delete mode 100644 docs/classes/FixedThreadPool.html delete mode 100644 docs/classes/PriorityQueue.html delete mode 100644 docs/classes/ThreadWorker.html delete mode 100644 docs/classes/WorkerChoiceStrategiesContext.html create mode 100644 docs/classes/src.AbstractPool.html create mode 100644 docs/classes/src.AbstractWorker.html create mode 100644 docs/classes/src.CircularBuffer.html create mode 100644 docs/classes/src.ClusterWorker.html create mode 100644 docs/classes/src.DynamicClusterPool.html create mode 100644 docs/classes/src.DynamicThreadPool.html create mode 100644 docs/classes/src.FixedClusterPool.html create mode 100644 docs/classes/src.FixedThreadPool.html create mode 100644 docs/classes/src.PriorityQueue.html create mode 100644 docs/classes/src.ThreadWorker.html create mode 100644 docs/classes/src.WorkerChoiceStrategiesContext.html create mode 100644 docs/documents/api.html create mode 100644 docs/documents/general_guidelines.html create mode 100644 docs/documents/worker_choice_strategies.html delete mode 100644 docs/functions/availableParallelism.html create mode 100644 docs/functions/src.availableParallelism.html delete mode 100644 docs/interfaces/EventLoopUtilizationMeasurementStatistics.html delete mode 100644 docs/interfaces/FixedQueueNode.html delete mode 100644 docs/interfaces/IFixedQueue.html delete mode 100644 docs/interfaces/IPool.html delete mode 100644 docs/interfaces/IWorkerChoiceStrategy.html delete mode 100644 docs/interfaces/MeasurementOptions.html delete mode 100644 docs/interfaces/MeasurementStatistics.html delete mode 100644 docs/interfaces/MeasurementStatisticsRequirements.html delete mode 100644 docs/interfaces/MessageValue.html delete mode 100644 docs/interfaces/PoolInfo.html delete mode 100644 docs/interfaces/PoolOptions.html delete mode 100644 docs/interfaces/PromiseResponseWrapper.html delete mode 100644 docs/interfaces/StrategyData.html delete mode 100644 docs/interfaces/StrategyPolicy.html delete mode 100644 docs/interfaces/Task.html delete mode 100644 docs/interfaces/TaskFunctionObject.html delete mode 100644 docs/interfaces/TaskFunctionOperationResult.html delete mode 100644 docs/interfaces/TaskFunctionProperties.html delete mode 100644 docs/interfaces/TaskPerformance.html delete mode 100644 docs/interfaces/TaskStatistics.html delete mode 100644 docs/interfaces/TaskStatisticsRequirements.html delete mode 100644 docs/interfaces/TasksQueueOptions.html delete mode 100644 docs/interfaces/WorkerChoiceStrategyOptions.html delete mode 100644 docs/interfaces/WorkerError.html delete mode 100644 docs/interfaces/WorkerInfo.html delete mode 100644 docs/interfaces/WorkerNodeEventDetail.html delete mode 100644 docs/interfaces/WorkerNodeOptions.html delete mode 100644 docs/interfaces/WorkerOptions.html delete mode 100644 docs/interfaces/WorkerStatistics.html delete mode 100644 docs/interfaces/WorkerUsage.html create mode 100644 docs/interfaces/src.EventLoopUtilizationMeasurementStatistics.html create mode 100644 docs/interfaces/src.FixedQueueNode.html create mode 100644 docs/interfaces/src.IFixedQueue.html create mode 100644 docs/interfaces/src.IPool.html rename docs/interfaces/{IWorker.html => src.IWorker.html} (66%) create mode 100644 docs/interfaces/src.IWorkerChoiceStrategy.html rename docs/interfaces/{IWorkerNode.html => src.IWorkerNode.html} (61%) create mode 100644 docs/interfaces/src.MeasurementOptions.html create mode 100644 docs/interfaces/src.MeasurementStatistics.html create mode 100644 docs/interfaces/src.MeasurementStatisticsRequirements.html create mode 100644 docs/interfaces/src.MessageValue.html create mode 100644 docs/interfaces/src.PoolInfo.html create mode 100644 docs/interfaces/src.PoolOptions.html create mode 100644 docs/interfaces/src.PromiseResponseWrapper.html create mode 100644 docs/interfaces/src.StrategyData.html create mode 100644 docs/interfaces/src.StrategyPolicy.html create mode 100644 docs/interfaces/src.Task.html create mode 100644 docs/interfaces/src.TaskFunctionObject.html create mode 100644 docs/interfaces/src.TaskFunctionOperationResult.html create mode 100644 docs/interfaces/src.TaskFunctionProperties.html create mode 100644 docs/interfaces/src.TaskPerformance.html create mode 100644 docs/interfaces/src.TaskStatistics.html create mode 100644 docs/interfaces/src.TaskStatisticsRequirements.html create mode 100644 docs/interfaces/src.TasksQueueOptions.html create mode 100644 docs/interfaces/src.WorkerChoiceStrategyOptions.html create mode 100644 docs/interfaces/src.WorkerError.html create mode 100644 docs/interfaces/src.WorkerInfo.html create mode 100644 docs/interfaces/src.WorkerNodeEventDetail.html create mode 100644 docs/interfaces/src.WorkerNodeOptions.html create mode 100644 docs/interfaces/src.WorkerOptions.html create mode 100644 docs/interfaces/src.WorkerStatistics.html create mode 100644 docs/interfaces/src.WorkerUsage.html create mode 100644 docs/media/README.md create mode 100644 docs/modules/src.html delete mode 100644 docs/types/ClusterPoolOptions.html delete mode 100644 docs/types/ErrorHandler.html delete mode 100644 docs/types/EventHandler.html delete mode 100644 docs/types/ExitHandler.html delete mode 100644 docs/types/KillBehavior.html delete mode 100644 docs/types/KillHandler.html delete mode 100644 docs/types/Measurement.html delete mode 100644 docs/types/MessageHandler.html delete mode 100644 docs/types/OnlineHandler.html delete mode 100644 docs/types/PoolEvent.html delete mode 100644 docs/types/PoolType.html delete mode 100644 docs/types/TaskAsyncFunction.html delete mode 100644 docs/types/TaskFunction.html delete mode 100644 docs/types/TaskSyncFunction.html delete mode 100644 docs/types/ThreadPoolOptions.html delete mode 100644 docs/types/WorkerType.html delete mode 100644 docs/types/Writable.html rename docs/types/{WorkerChoiceStrategy.html => src.ClusterPoolOptions.html} (50%) create mode 100644 docs/types/src.ErrorHandler.html create mode 100644 docs/types/src.EventHandler.html create mode 100644 docs/types/src.ExitHandler.html create mode 100644 docs/types/src.KillBehavior.html create mode 100644 docs/types/src.KillHandler.html create mode 100644 docs/types/src.Measurement.html create mode 100644 docs/types/src.MessageHandler.html create mode 100644 docs/types/src.OnlineHandler.html create mode 100644 docs/types/src.PoolEvent.html create mode 100644 docs/types/src.PoolType.html create mode 100644 docs/types/src.TaskAsyncFunction.html create mode 100644 docs/types/src.TaskFunction.html create mode 100644 docs/types/src.TaskFunctions.html create mode 100644 docs/types/src.TaskSyncFunction.html create mode 100644 docs/types/src.ThreadPoolOptions.html create mode 100644 docs/types/src.WorkerChoiceStrategy.html create mode 100644 docs/types/src.WorkerType.html create mode 100644 docs/types/src.Writable.html delete mode 100644 docs/variables/KillBehaviors.html delete mode 100644 docs/variables/Measurements.html delete mode 100644 docs/variables/PoolEvents.html delete mode 100644 docs/variables/PoolTypes.html delete mode 100644 docs/variables/WorkerChoiceStrategies.html delete mode 100644 docs/variables/WorkerTypes.html rename docs/{types/TaskFunctions.html => variables/src.KillBehaviors.html} (60%) create mode 100644 docs/variables/src.Measurements.html create mode 100644 docs/variables/src.PoolEvents.html create mode 100644 docs/variables/src.PoolTypes.html create mode 100644 docs/variables/src.WorkerChoiceStrategies.html create mode 100644 docs/variables/src.WorkerTypes.html diff --git a/.lintstagedrc.js b/.lintstagedrc.js index 63463a93..c7d31289 100644 --- a/.lintstagedrc.js +++ b/.lintstagedrc.js @@ -1,8 +1,8 @@ export default { '**/*.{md,yml,yaml}': ['prettier --cache --write'], '**/*.{ts,tsx,js,jsx,cjs,mjs}': [ - 'biome format --write', + 'biome format --no-errors-on-unmatched --write', 'eslint --cache --fix', ], - '**/*.json': ['biome format --write'], + '**/*.json': ['biome format --no-errors-on-unmatched --write'], } diff --git a/docs/api.md b/docs/api.md index 113d4c12..12b552af 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,4 +1,4 @@ -# [API](https://poolifier.github.io/poolifier/) +# API ## Table of contents @@ -110,9 +110,9 @@ An object with these properties: - `WorkerChoiceStrategies.LEAST_USED`: Submit tasks to the worker with the minimum number of executing and queued tasks - `WorkerChoiceStrategies.LEAST_BUSY`: Submit tasks to the worker with the minimum tasks execution time - `WorkerChoiceStrategies.LEAST_ELU`: Submit tasks to the worker with the minimum event loop utilization (ELU) - - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN`: Submit tasks to worker by using a [weighted round robin scheduling algorithm](./worker-choice-strategies.md#weighted-round-robin) based on tasks execution time - - `WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN`: Submit tasks to worker by using an [interleaved weighted round robin scheduling algorithm](./worker-choice-strategies.md#interleaved-weighted-round-robin-experimental) based on tasks execution time (experimental) - - `WorkerChoiceStrategies.FAIR_SHARE`: Submit tasks to worker by using a [fair share scheduling algorithm](./worker-choice-strategies.md#fair-share) based on tasks execution time (the default) or ELU active time + - `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN`: Submit tasks to worker by using a [weighted round robin scheduling algorithm](./worker-choice-strategies.md) based on tasks execution time + - `WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN`: Submit tasks to worker by using an [interleaved weighted round robin scheduling algorithm](./worker-choice-strategies.md) based on tasks execution time (experimental) + - `WorkerChoiceStrategies.FAIR_SHARE`: Submit tasks to worker by using a [fair share scheduling algorithm](./worker-choice-strategies.md) based on tasks execution time (the default) or ELU active time `WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN`, `WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN` and `WorkerChoiceStrategies.FAIR_SHARE` strategies are targeted to heavy and long tasks. Default: `WorkerChoiceStrategies.ROUND_ROBIN` @@ -121,9 +121,9 @@ An object with these properties: Properties: - `measurement` (optional) - The measurement to use in worker choice strategies: `runTime`, `waitTime` or `elu`. - - `runTime` (optional) - Use the tasks [simple moving median](./worker-choice-strategies.md#simple-moving-median) runtime instead of the tasks simple moving average runtime in worker choice strategies. - - `waitTime` (optional) - Use the tasks [simple moving median](./worker-choice-strategies.md#simple-moving-median) wait time instead of the tasks simple moving average wait time in worker choice strategies. - - `elu` (optional) - Use the tasks [simple moving median](./worker-choice-strategies.md#simple-moving-median) ELU instead of the tasks simple moving average ELU in worker choice strategies. + - `runTime` (optional) - Use the tasks [simple moving median](./worker-choice-strategies.md) runtime instead of the tasks simple moving average runtime in worker choice strategies. + - `waitTime` (optional) - Use the tasks [simple moving median](./worker-choice-strategies.md) wait time instead of the tasks simple moving average wait time in worker choice strategies. + - `elu` (optional) - Use the tasks [simple moving median](./worker-choice-strategies.md) ELU instead of the tasks simple moving average ELU in worker choice strategies. - `weights` (optional) - The worker weights to use in weighted round robin worker choice strategies: `Record`. Default: `{ runTime: { median: false }, waitTime: { median: false }, elu: { median: false } }` diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 4ca07d7e..5d2a30c2 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA52YTXPbIBCG/4vOmaZJm7TNLZ/TTD/ixk5z6PRA5HVMg0EF5InbyX/vIMcRCNjFvep99wGxy4L0429l4dFWR9XxnbGa1XaklKh2qobZeXVU1YIZA2bXV1/N7cJZHricVkd7+++fdiLKrdIPoPOctY6RTrmuW8H0STubpUihjpJEayzo3JQCGeOcrSRb8PrZn16n2FNAnMw1sCkK7C0Y74I/whSd39BB0rC5DQwYa6S50tyuvrXQQkwKZIyzHi2XSl/FKGvH6VzxGsZWMwv3HMypkp0eYVE7Ns75EqT9rFRzY7ngf5jlSn4BZloNC5B2bJnlxvLa9GNyaUHPWA1mtzg6nML+weEwid2yflVTSI4TWjDYZW9NkjwdxYTl5APiOhqEDlPvB6cSnwwPUrnCYKGzAJ1dZU/HMF6CrxqX8XRtxLZCKFFzW9dXMuAafrd8/XCLYfwofEhj2D18ZyJThr4BA7liu5QzlYRsRAqAZcnTUYxWC27gGkyjpIFbzZomU+NpKwbf1O4ZsyyJ9A0loJESvE5vmtCCwSbMPCQRTqACL1pZu0W9uvsFtc1iQlsxtAHdtdprMK0ooIf+0mFGWjWgLYd05aStFHwEeqb0gsk6vTEGHgpnuk6OFXjkopBE+wkt5TCy4eTt2CCpMwBbDsRPD3OutUpvek+nMdmG1ss0xJ1S3fXjDCzj6bM66SxD02vouWgkjStGEfU5NNHAG3cSIaxOxzDeZT16T7tq+g+Y/GHz+sO7vYN9/17qSukjk1PhHzNrmq+RHJf4HMfTSM4jz2J6iaJ84kKcwJwtuYowvlbCyczGkyiKd8UZUjyJpnRXmcx0QpViXUnBZQ4ViBTJlVqX3yHlRSghTFYNpADuORXv+vmxWcl6c0gOQZGhhIjB/ocTbdVALCGNiVccb/OGL1/qmUYSGSgi/jW1hhZ8R2W4qfroFZKhuWV3IiY8P9+mm3grtWSau/CwpQxW6k2mESQ5vo5gXrZWEtKrBMItXZbQiQgg/SMkRUs7SXR2dp6MQNiSceECRkwzIUBws+hps83G2035Quzh26ef/wB0MVfoHBUAAA==" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAA52Y21IUMRBA/2WeQRQVkTdulpQXVi7yYFFUyPSykWwyJhlktfh3K7OXSWaT7uDr9unTmaSTzOyPv5WDR1ftVawR1UbVMDep9qpa83YKytkt1ogXEzeV1UZ1L1Rd7e2+3t3debn7tLHKvAMFhsnNu1bUIIUCmxItqJueory/tbkHs8knWnDYtM4wB3cibZ+zN3P2pmepGtbwXjfVdSvBblnD47ztjYpPhKwNqGrvxyp5/9YX4m6ktewtXDJrF5aQiJWvtsNhLLmr7jFw15zBbIfC8FYyc9COxzlbzKA22VoHBhtahGCuo5liU8EXfH7e1rkC68XEAKtJaY9hzg/iEWpynEOKNFJjHECYb2SENsLNvrXQQtoWIZhrXhFb4pDATHPisNuH56tteKhVF0+q0RSs1vEDKPdZ6+bSCSn+MCe0+gLMtgb8qXDumBPWCR6cGEI5MGPGF6WLDYPz4O3OcGG7Kf6qa8jWijFMeNKjWVvAoKq41YaS9R4bpA9bYihINURSES3vjBLGdIEenfmAwVTBwp82vhPyfbOOFooLevLZ/ZdMOINfrZj/+MxSYSZe1lp2B9+ZRNo0hDCZb8QTNdZZ0RKgJNTKBQyqMnoqLJyBbbSycGVY0yD7II1jBZa9fcQcy2pDqEQ20lLw/OaKMUx4wex9VuODVPKHVnE/yae3P4E7VBWjxeIGTHdcn4FtZWGFOKe01MjoBoyL3jyRKj1OFRiBGWszZYrnN9CAo5S2uxGoTbBGUtqCYyvGyoVFB1U+BSuUukuoqUFy6FLHxuj8IREwtAo9DHuEFvlbr3vNOQLHRP5dIEmX6cvmNCBpbZmyWFfQv0OQll76m43wdQymCj4e1p7ZzZr4Ayt/eb18/+7V2+3w3di32UemahleW70xjJMu3xCYK4iTrkeBqvowZfokpDyACXsQOqkK4yUuZFRBmDIFr1QpUxCmTd2rEzKsmKB8p8r/64LoIoCy+Vbs1j1lWgVLLBezBnISH6Mc/m7YtzPFlxdwSrYGlVgp4f+4kts7Akps5wWPe/6cp13944AcQmsQZcW//HpxwTdfxp3rnT5Keoxw7FamLYvYc06iYOYemBE+ff04Gszc68wBknWFDKJabcOsqCcIjZ9K1NIBiCT9J0/OmKZJPTrKAEFE7IEJ6ZNGzDApQQo77Y3j5SbtjCk2Vu+8ebp+uv4HgKxIvWUXAAA=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 683e52b5..632e9ee0 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/AbstractPool.html b/docs/classes/AbstractPool.html deleted file mode 100644 index 0c37fa62..00000000 --- a/docs/classes/AbstractPool.html +++ /dev/null @@ -1,164 +0,0 @@ -AbstractPool | poolifier - v4.4.4

Class AbstractPool<Worker, Data, Response>Abstract

Base class that implements some shared logic for all poolifier pools.

-

Type Parameters

  • Worker extends IWorker

    Type of worker which manages this pool.

    -
  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Implements

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. -The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

-

Events that can currently be listened to:

-
    -
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • -
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • -
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • -
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • -
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • -
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • -
  • 'destroy': Emitted when the pool is destroyed.
  • -
  • 'error': Emitted when an uncaught error occurs.
  • -
  • 'taskError': Emitted when an error occurs while executing a task.
  • -
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • -
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • -
-
filePath: string

Path to the worker file.

-
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

-
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

-

Options for the pool.

-
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

-
    -
  • key: The message id of each submitted task.
  • -
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • -
-

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

-
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

-
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

-

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    -

    Returns boolean

    The pool back pressure boolean status.

    -
  • get type(): "fixed" | "dynamic"
  • The pool type.

    -

    If it is 'dynamic', it provides the max property.

    -

    Returns "fixed" | "dynamic"

Methods

  • Hook executed after the worker task execution. -Can be overridden.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • message: MessageValue<Response, unknown>

      The received message.

      -

    Returns void

  • Method hooked up after a worker node has been newly created. -Can be overridden.

    -

    Parameters

    • workerNodeKey: number

      The newly created worker node key.

      -

    Returns void

  • Hook executed before the worker task execution. -Can be overridden.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • task: Task<Data>

      The task to execute.

      -

    Returns void

  • Creates a new, completely set up dynamic worker node.

    -

    Returns number

    New, completely set up dynamic worker node key.

    -
  • Creates a new, completely set up worker node.

    -

    Returns number

    New, completely set up worker node key.

    -
  • Deregisters a listener callback on the worker given its worker node key.

    -

    Type Parameters

    • Message

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • listener: ((message: MessageValue<Message, unknown>) => void)

      The message listener callback.

      -

    Returns void

  • Terminates the worker node given its worker node key.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -

    Returns Promise<void>

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    -
  • Gets the worker information given its worker node key.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -

    Returns undefined | WorkerInfo

    The worker information.

    -
  • Whether the worker nodes are back pressured or not.

    -

    Returns boolean

    Worker nodes back pressure boolean status.

    -
  • Whether worker nodes are executing concurrently their tasks quota or not.

    -

    Returns boolean

    Worker nodes busyness boolean status.

    -
  • Returns whether the worker is the main worker or not.

    -

    Returns boolean

    true if the worker is the main worker, false otherwise.

    -
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    -
  • Registers once a listener callback on the worker given its worker node key.

    -

    Type Parameters

    • Message

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • listener: ((message: MessageValue<Message, unknown>) => void)

      The message listener callback.

      -

    Returns void

  • Registers a listener callback on the worker given its worker node key.

    -

    Type Parameters

    • Message

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • listener: ((message: MessageValue<Message, unknown>) => void)

      The message listener callback.

      -

    Returns void

  • Sends the startup message to worker given its worker node key.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -

    Returns void

  • Sends a message to worker given its worker node key.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • message: MessageValue<Data, unknown>

      The message.

      -
    • OptionaltransferList: readonly TransferListItem[]

      The optional array of transferable objects.

      -

    Returns void

  • Setup hook to execute code before worker nodes are created in the abstract constructor. -Can be overridden.

    -

    Returns void

  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

  • Conditions for dynamic worker creation.

    -

    Returns boolean

    Whether to create a dynamic worker or not.

    -
diff --git a/docs/classes/AbstractWorker.html b/docs/classes/AbstractWorker.html deleted file mode 100644 index 7aaf0570..00000000 --- a/docs/classes/AbstractWorker.html +++ /dev/null @@ -1,80 +0,0 @@ -AbstractWorker | poolifier - v4.4.4

Class AbstractWorker<MainWorker, Data, Response>Abstract

Base class that implements some shared logic for all poolifier workers.

-

Type Parameters

  • MainWorker extends MessagePort | Worker

    Type of main worker.

    -
  • Data = unknown

    Type of data this worker receives from pool's execution. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of response the worker sends back to the main worker. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

activeInterval?: Timeout

Handler id of the activeInterval worker activity check.

-
id: number

Worker id.

-
isMain: undefined | boolean

Whether this is the main worker or not.

-
lastTaskTimestamp: number

Timestamp of the last task processed by this worker.

-
opts: WorkerOptions = DEFAULT_WORKER_OPTIONS

Options for the worker.

-
statistics?: WorkerStatistics

Performance statistics computation requirements.

-
taskFunctions: Map<string, TaskFunctionObject<Data, Response>>

Task function object(s) processed by the worker when the pool's execute method is invoked.

-

Methods

  • Handles a worker error.

    -

    Parameters

    • error: Error

      The error raised by the worker.

      -

    Returns {
        error?: Error;
        message: string;
        stack?: string;
    }

    The worker error object.

    -
    • Optionalerror?: Error
    • message: string
    • Optionalstack?: string
diff --git a/docs/classes/CircularBuffer.html b/docs/classes/CircularBuffer.html deleted file mode 100644 index c71b3ae4..00000000 --- a/docs/classes/CircularBuffer.html +++ /dev/null @@ -1,24 +0,0 @@ -CircularBuffer | poolifier - v4.4.4

Class CircularBufferInternal

Circular buffer designed for positive numbers.

-

Constructors

Properties

Methods

Constructors

Properties

size: number

Methods

  • Checks whether the buffer is empty.

    -

    Returns boolean

    Whether the buffer is empty.

    -
  • Checks whether the buffer is full.

    -

    Returns boolean

    Whether the buffer is full.

    -
  • Gets number from buffer.

    -

    Returns undefined | number

    Number from buffer.

    -
  • Puts number into buffer.

    -

    Parameters

    • number: number

      Number to put into buffer.

      -

    Returns void

diff --git a/docs/classes/ClusterWorker.html b/docs/classes/ClusterWorker.html deleted file mode 100644 index 16467638..00000000 --- a/docs/classes/ClusterWorker.html +++ /dev/null @@ -1,83 +0,0 @@ -ClusterWorker | poolifier - v4.4.4

Class ClusterWorker<Data, Response>

A cluster worker used by a poolifier ClusterPool.

-

When this worker is inactive for more than the given maxInactiveTime, -it will send a termination request to its main worker.

-

If you use a DynamicClusterPool the extra workers that were created will be terminated, -but the minimum number of workers will be guaranteed.

-

2.0.0

-

Type Parameters

  • Data = unknown

    Type of data this worker receives from pool's execution. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of response the worker sends back to the main worker. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

activeInterval?: Timeout

Handler id of the activeInterval worker activity check.

-
isMain: undefined | boolean

Whether this is the main worker or not.

-
lastTaskTimestamp: number

Timestamp of the last task processed by this worker.

-
opts: WorkerOptions = DEFAULT_WORKER_OPTIONS

Options for the worker.

-
statistics?: WorkerStatistics

Performance statistics computation requirements.

-
taskFunctions: Map<string, TaskFunctionObject<Data, Response>>

Task function object(s) processed by the worker when the pool's execute method is invoked.

-

Accessors

Methods

  • Handles a worker error.

    -

    Parameters

    • error: Error

      The error raised by the worker.

      -

    Returns {
        message: string;
        stack?: string;
    }

    The worker error object.

    -
    • message: string
    • Optionalstack?: string
diff --git a/docs/classes/DynamicClusterPool.html b/docs/classes/DynamicClusterPool.html deleted file mode 100644 index c14f93b6..00000000 --- a/docs/classes/DynamicClusterPool.html +++ /dev/null @@ -1,166 +0,0 @@ -DynamicClusterPool | poolifier - v4.4.4

Class DynamicClusterPool<Data, Response>

A cluster pool with a dynamic number of workers, but a guaranteed minimum number of workers.

-

This cluster pool creates new workers when the others are busy, up to the maximum number of workers. -When the maximum number of workers is reached and workers are busy, an event is emitted. If you want to listen to this event, use the pool's emitter.

-

2.0.0

-

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. -The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

-

Events that can currently be listened to:

-
    -
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • -
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • -
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • -
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • -
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • -
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • -
  • 'destroy': Emitted when the pool is destroyed.
  • -
  • 'error': Emitted when an uncaught error occurs.
  • -
  • 'taskError': Emitted when an error occurs while executing a task.
  • -
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • -
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • -
-
filePath: string

Path to the worker file.

-
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

-
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

-
opts: PoolOptions<Worker>

Options for the pool.

-
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

-
    -
  • key: The message id of each submitted task.
  • -
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • -
-

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

-
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

-
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

-

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    -

    Returns boolean

    The pool back pressure boolean status.

    -
  • get busy(): boolean
  • Whether the pool is busy or not.

    -

    Returns boolean

    The pool busyness boolean status.

    -
  • get type(): "fixed" | "dynamic"
  • The pool type.

    -

    If it is 'dynamic', it provides the max property.

    -

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    -

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    -
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    -
  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/DynamicThreadPool.html b/docs/classes/DynamicThreadPool.html deleted file mode 100644 index f002d599..00000000 --- a/docs/classes/DynamicThreadPool.html +++ /dev/null @@ -1,167 +0,0 @@ -DynamicThreadPool | poolifier - v4.4.4

Class DynamicThreadPool<Data, Response>

A thread pool with a dynamic number of threads, but a guaranteed minimum number of threads.

-

This thread pool creates new threads when the others are busy, up to the maximum number of threads. -When the maximum number of threads is reached and workers are busy, an event is emitted. If you want to listen to this event, use the pool's emitter.

-

0.0.1

-

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. -The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

-

Events that can currently be listened to:

-
    -
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • -
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • -
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • -
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • -
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • -
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • -
  • 'destroy': Emitted when the pool is destroyed.
  • -
  • 'error': Emitted when an uncaught error occurs.
  • -
  • 'taskError': Emitted when an error occurs while executing a task.
  • -
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • -
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • -
-
filePath: string

Path to the worker file.

-
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

-
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

-
opts: PoolOptions<Worker>

Options for the pool.

-
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

-
    -
  • key: The message id of each submitted task.
  • -
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • -
-

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

-
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

-
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

-

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    -

    Returns boolean

    The pool back pressure boolean status.

    -
  • get busy(): boolean
  • Whether the pool is busy or not.

    -

    Returns boolean

    The pool busyness boolean status.

    -
  • get type(): "fixed" | "dynamic"
  • The pool type.

    -

    If it is 'dynamic', it provides the max property.

    -

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    -

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    -
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    -
  • Sends a message to worker given its worker node key.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • message: MessageValue<Data, unknown>

      The message.

      -
    • OptionaltransferList: readonly TransferListItem[]

      The optional array of transferable objects.

      -

    Returns void

  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/FixedClusterPool.html b/docs/classes/FixedClusterPool.html deleted file mode 100644 index 6e2b2a54..00000000 --- a/docs/classes/FixedClusterPool.html +++ /dev/null @@ -1,164 +0,0 @@ -FixedClusterPool | poolifier - v4.4.4

Class FixedClusterPool<Data, Response>

A cluster pool with a fixed number of workers.

-

2.0.0

-

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. -The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

-

Events that can currently be listened to:

-
    -
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • -
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • -
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • -
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • -
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • -
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • -
  • 'destroy': Emitted when the pool is destroyed.
  • -
  • 'error': Emitted when an uncaught error occurs.
  • -
  • 'taskError': Emitted when an error occurs while executing a task.
  • -
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • -
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • -
-
filePath: string

Path to the worker file.

-
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

-
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

-
opts: PoolOptions<Worker>

Options for the pool.

-
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

-
    -
  • key: The message id of each submitted task.
  • -
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • -
-

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

-
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

-
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

-

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    -

    Returns boolean

    The pool back pressure boolean status.

    -
  • get busy(): boolean
  • Whether the pool is busy or not.

    -

    Returns boolean

    The pool busyness boolean status.

    -
  • get type(): "fixed" | "dynamic"
  • The pool type.

    -

    If it is 'dynamic', it provides the max property.

    -

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    -

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    -
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    -
  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/FixedThreadPool.html b/docs/classes/FixedThreadPool.html deleted file mode 100644 index 33d95d86..00000000 --- a/docs/classes/FixedThreadPool.html +++ /dev/null @@ -1,165 +0,0 @@ -FixedThreadPool | poolifier - v4.4.4

Class FixedThreadPool<Data, Response>

A thread pool with a fixed number of threads.

-

0.0.1

-

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. -The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

-

Events that can currently be listened to:

-
    -
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • -
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • -
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • -
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • -
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • -
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • -
  • 'destroy': Emitted when the pool is destroyed.
  • -
  • 'error': Emitted when an uncaught error occurs.
  • -
  • 'taskError': Emitted when an error occurs while executing a task.
  • -
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • -
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • -
-
filePath: string

Path to the worker file.

-
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

-
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

-
opts: PoolOptions<Worker>

Options for the pool.

-
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

-
    -
  • key: The message id of each submitted task.
  • -
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • -
-

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

-
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

-
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

-

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    -

    Returns boolean

    The pool back pressure boolean status.

    -
  • get busy(): boolean
  • Whether the pool is busy or not.

    -

    Returns boolean

    The pool busyness boolean status.

    -
  • get type(): "fixed" | "dynamic"
  • The pool type.

    -

    If it is 'dynamic', it provides the max property.

    -

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    -

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    -
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      -
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      -
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      -

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    -
  • Sends a message to worker given its worker node key.

    -

    Parameters

    • workerNodeKey: number

      The worker node key.

      -
    • message: MessageValue<Data, unknown>

      The message.

      -
    • OptionaltransferList: readonly TransferListItem[]

      The optional array of transferable objects.

      -

    Returns void

  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/PriorityQueue.html b/docs/classes/PriorityQueue.html deleted file mode 100644 index 4cb74512..00000000 --- a/docs/classes/PriorityQueue.html +++ /dev/null @@ -1,42 +0,0 @@ -PriorityQueue | poolifier - v4.4.4

Class PriorityQueue<T>Internal

Priority queue.

-

Type Parameters

  • T

    Type of priority queue data.

    -

Constructors

Properties

Accessors

Methods

Constructors

  • Constructs a priority queue.

    -

    Type Parameters

    • T

    Parameters

    • bucketSize: number = defaultBucketSize

      Prioritized bucket size.

      -
    • enablePriority: boolean = false

      Whether to enable priority.

      -

    Returns PriorityQueue<T>

    PriorityQueue.

    -
    defaultBucketSize
    -
    - -
    false
    -
    - -

Properties

maxSize: number

The priority queue maximum size.

-

Accessors

  • get buckets(): number
  • The number of filled prioritized buckets.

    -

    Returns number

    The number of filled prioritized buckets.

    -
  • get enablePriority(): boolean
  • Whether priority is enabled.

    -

    Returns boolean

    Whether priority is enabled.

    -
  • set enablePriority(enablePriority): void
  • Enables/disables priority.

    -

    Parameters

    • enablePriority: boolean

      Whether to enable priority.

      -

    Returns void

Methods

  • Dequeue data from the priority queue.

    -

    Parameters

    • Optionalbucket: number

      The prioritized bucket to dequeue from.

      -

    Returns undefined | T

    The dequeued data or undefined if the priority queue is empty.

    -
  • Enqueue data into the priority queue.

    -

    Parameters

    • data: T

      Data to enqueue.

      -
    • Optionalpriority: number

      Priority of the data. Lower values have higher priority.

      -

    Returns number

    The new size of the priority queue.

    -
diff --git a/docs/classes/ThreadWorker.html b/docs/classes/ThreadWorker.html deleted file mode 100644 index 9ede79ee..00000000 --- a/docs/classes/ThreadWorker.html +++ /dev/null @@ -1,83 +0,0 @@ -ThreadWorker | poolifier - v4.4.4

Class ThreadWorker<Data, Response>

A thread worker used by a poolifier ThreadPool.

-

When this worker is inactive for more than the given maxInactiveTime, -it will send a termination request to its main thread.

-

If you use a DynamicThreadPool the extra workers that were created will be terminated, -but the minimum number of workers will be guaranteed.

-

0.0.1

-

Type Parameters

  • Data = unknown

    Type of data this worker receives from pool's execution. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of response the worker sends back to the main thread. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Constructors

Properties

activeInterval?: Timeout

Handler id of the activeInterval worker activity check.

-
isMain: undefined | boolean

Whether this is the main worker or not.

-
lastTaskTimestamp: number

Timestamp of the last task processed by this worker.

-
opts: WorkerOptions = DEFAULT_WORKER_OPTIONS

Options for the worker.

-
statistics?: WorkerStatistics

Performance statistics computation requirements.

-
taskFunctions: Map<string, TaskFunctionObject<Data, Response>>

Task function object(s) processed by the worker when the pool's execute method is invoked.

-

Accessors

Methods

  • Handles a worker error.

    -

    Parameters

    • error: Error

      The error raised by the worker.

      -

    Returns {
        error: Error;
        message: string;
        stack?: string;
    }

    The worker error object.

    -
    • error: Error
    • message: string
    • Optionalstack?: string
diff --git a/docs/classes/WorkerChoiceStrategiesContext.html b/docs/classes/WorkerChoiceStrategiesContext.html deleted file mode 100644 index 5cb81ff1..00000000 --- a/docs/classes/WorkerChoiceStrategiesContext.html +++ /dev/null @@ -1,48 +0,0 @@ -WorkerChoiceStrategiesContext | poolifier - v4.4.4

Class WorkerChoiceStrategiesContext<Worker, Data, Response>Internal

The worker choice strategies context.

-

Type Parameters

  • Worker extends IWorker

    Type of worker.

    -
  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Constructors

Properties

retriesCount: number

The number of worker choice strategies execution retries.

-

Methods

  • Executes the given worker choice strategy in the context algorithm.

    -

    Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN" = ...

      The worker choice strategy algorithm to execute.

      -

    Returns number

    The key of the worker node.

    -
    this.defaultWorkerChoiceStrategy
    -
    - -

    https://nodejs.org/api/errors.html#class-error If after computed retries the worker node key is null or undefined.

    -
  • Sets the default worker choice strategy to use in the context.

    -

    Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"

      The default worker choice strategy to set.

      -
    • Optionalopts: WorkerChoiceStrategyOptions

      The worker choice strategy options.

      -

    Returns void

  • Synchronizes the active worker choice strategies in the context with the given worker choice strategies.

    -

    Parameters

    • workerChoiceStrategies: Set<
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN">

      The worker choice strategies to synchronize.

      -
    • Optionalopts: WorkerChoiceStrategyOptions

      The worker choice strategy options.

      -

    Returns void

diff --git a/docs/classes/src.AbstractPool.html b/docs/classes/src.AbstractPool.html new file mode 100644 index 00000000..90255c16 --- /dev/null +++ b/docs/classes/src.AbstractPool.html @@ -0,0 +1,164 @@ +AbstractPool | poolifier - v4.4.4

Class AbstractPool<Worker, Data, Response>Abstract

Base class that implements some shared logic for all poolifier pools.

+

Type Parameters

  • Worker extends IWorker

    Type of worker which manages this pool.

    +
  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Implements

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. +The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

+

Events that can currently be listened to:

+
    +
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • +
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • +
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • +
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • +
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • +
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • +
  • 'destroy': Emitted when the pool is destroyed.
  • +
  • 'error': Emitted when an uncaught error occurs.
  • +
  • 'taskError': Emitted when an error occurs while executing a task.
  • +
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • +
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • +
+
filePath: string

Path to the worker file.

+
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

+
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

+

Options for the pool.

+
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

+
    +
  • key: The message id of each submitted task.
  • +
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • +
+

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

+
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

+
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

+

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    +

    Returns boolean

    The pool back pressure boolean status.

    +
  • get type(): "fixed" | "dynamic"
  • The pool type.

    +

    If it is 'dynamic', it provides the max property.

    +

    Returns "fixed" | "dynamic"

Methods

  • Hook executed after the worker task execution. +Can be overridden.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • message: MessageValue<Response, unknown>

      The received message.

      +

    Returns void

  • Method hooked up after a worker node has been newly created. +Can be overridden.

    +

    Parameters

    • workerNodeKey: number

      The newly created worker node key.

      +

    Returns void

  • Hook executed before the worker task execution. +Can be overridden.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • task: Task<Data>

      The task to execute.

      +

    Returns void

  • Creates a new, completely set up dynamic worker node.

    +

    Returns number

    New, completely set up dynamic worker node key.

    +
  • Creates a new, completely set up worker node.

    +

    Returns number

    New, completely set up worker node key.

    +
  • Deregisters a listener callback on the worker given its worker node key.

    +

    Type Parameters

    • Message

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • listener: ((message: MessageValue<Message, unknown>) => void)

      The message listener callback.

      +

    Returns void

  • Terminates the worker node given its worker node key.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +

    Returns Promise<void>

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    +
  • Gets the worker information given its worker node key.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +

    Returns undefined | WorkerInfo

    The worker information.

    +
  • Whether the worker nodes are back pressured or not.

    +

    Returns boolean

    Worker nodes back pressure boolean status.

    +
  • Whether worker nodes are executing concurrently their tasks quota or not.

    +

    Returns boolean

    Worker nodes busyness boolean status.

    +
  • Returns whether the worker is the main worker or not.

    +

    Returns boolean

    true if the worker is the main worker, false otherwise.

    +
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    +
  • Registers once a listener callback on the worker given its worker node key.

    +

    Type Parameters

    • Message

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • listener: ((message: MessageValue<Message, unknown>) => void)

      The message listener callback.

      +

    Returns void

  • Registers a listener callback on the worker given its worker node key.

    +

    Type Parameters

    • Message

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • listener: ((message: MessageValue<Message, unknown>) => void)

      The message listener callback.

      +

    Returns void

  • Sends the startup message to worker given its worker node key.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +

    Returns void

  • Sends a message to worker given its worker node key.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • message: MessageValue<Data, unknown>

      The message.

      +
    • OptionaltransferList: readonly TransferListItem[]

      The optional array of transferable objects.

      +

    Returns void

  • Setup hook to execute code before worker nodes are created in the abstract constructor. +Can be overridden.

    +

    Returns void

  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

  • Conditions for dynamic worker creation.

    +

    Returns boolean

    Whether to create a dynamic worker or not.

    +
diff --git a/docs/classes/src.AbstractWorker.html b/docs/classes/src.AbstractWorker.html new file mode 100644 index 00000000..90b47018 --- /dev/null +++ b/docs/classes/src.AbstractWorker.html @@ -0,0 +1,80 @@ +AbstractWorker | poolifier - v4.4.4

Class AbstractWorker<MainWorker, Data, Response>Abstract

Base class that implements some shared logic for all poolifier workers.

+

Type Parameters

  • MainWorker extends MessagePort | Worker

    Type of main worker.

    +
  • Data = unknown

    Type of data this worker receives from pool's execution. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of response the worker sends back to the main worker. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

activeInterval?: Timeout

Handler id of the activeInterval worker activity check.

+
id: number

Worker id.

+
isMain: undefined | boolean

Whether this is the main worker or not.

+
lastTaskTimestamp: number

Timestamp of the last task processed by this worker.

+
opts: WorkerOptions = DEFAULT_WORKER_OPTIONS

Options for the worker.

+
statistics?: WorkerStatistics

Performance statistics computation requirements.

+
taskFunctions: Map<string, TaskFunctionObject<Data, Response>>

Task function object(s) processed by the worker when the pool's execute method is invoked.

+

Methods

  • Handles a worker error.

    +

    Parameters

    • error: Error

      The error raised by the worker.

      +

    Returns {
        error?: Error;
        message: string;
        stack?: string;
    }

    The worker error object.

    +
    • Optionalerror?: Error
    • message: string
    • Optionalstack?: string
diff --git a/docs/classes/src.CircularBuffer.html b/docs/classes/src.CircularBuffer.html new file mode 100644 index 00000000..29372e85 --- /dev/null +++ b/docs/classes/src.CircularBuffer.html @@ -0,0 +1,24 @@ +CircularBuffer | poolifier - v4.4.4

Class CircularBufferInternal

Circular buffer designed for positive numbers.

+

Constructors

Properties

Methods

Constructors

Properties

size: number

Methods

  • Checks whether the buffer is empty.

    +

    Returns boolean

    Whether the buffer is empty.

    +
  • Checks whether the buffer is full.

    +

    Returns boolean

    Whether the buffer is full.

    +
  • Gets number from buffer.

    +

    Returns undefined | number

    Number from buffer.

    +
  • Puts number into buffer.

    +

    Parameters

    • number: number

      Number to put into buffer.

      +

    Returns void

diff --git a/docs/classes/src.ClusterWorker.html b/docs/classes/src.ClusterWorker.html new file mode 100644 index 00000000..f6519f3d --- /dev/null +++ b/docs/classes/src.ClusterWorker.html @@ -0,0 +1,83 @@ +ClusterWorker | poolifier - v4.4.4

Class ClusterWorker<Data, Response>

A cluster worker used by a poolifier ClusterPool.

+

When this worker is inactive for more than the given maxInactiveTime, +it will send a termination request to its main worker.

+

If you use a DynamicClusterPool the extra workers that were created will be terminated, +but the minimum number of workers will be guaranteed.

+

2.0.0

+

Type Parameters

  • Data = unknown

    Type of data this worker receives from pool's execution. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of response the worker sends back to the main worker. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

activeInterval?: Timeout

Handler id of the activeInterval worker activity check.

+
isMain: undefined | boolean

Whether this is the main worker or not.

+
lastTaskTimestamp: number

Timestamp of the last task processed by this worker.

+
opts: WorkerOptions = DEFAULT_WORKER_OPTIONS

Options for the worker.

+
statistics?: WorkerStatistics

Performance statistics computation requirements.

+
taskFunctions: Map<string, TaskFunctionObject<Data, Response>>

Task function object(s) processed by the worker when the pool's execute method is invoked.

+

Accessors

Methods

  • Handles a worker error.

    +

    Parameters

    • error: Error

      The error raised by the worker.

      +

    Returns {
        message: string;
        stack?: string;
    }

    The worker error object.

    +
    • message: string
    • Optionalstack?: string
diff --git a/docs/classes/src.DynamicClusterPool.html b/docs/classes/src.DynamicClusterPool.html new file mode 100644 index 00000000..84663db9 --- /dev/null +++ b/docs/classes/src.DynamicClusterPool.html @@ -0,0 +1,166 @@ +DynamicClusterPool | poolifier - v4.4.4

Class DynamicClusterPool<Data, Response>

A cluster pool with a dynamic number of workers, but a guaranteed minimum number of workers.

+

This cluster pool creates new workers when the others are busy, up to the maximum number of workers. +When the maximum number of workers is reached and workers are busy, an event is emitted. If you want to listen to this event, use the pool's emitter.

+

2.0.0

+

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. +The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

+

Events that can currently be listened to:

+
    +
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • +
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • +
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • +
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • +
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • +
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • +
  • 'destroy': Emitted when the pool is destroyed.
  • +
  • 'error': Emitted when an uncaught error occurs.
  • +
  • 'taskError': Emitted when an error occurs while executing a task.
  • +
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • +
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • +
+
filePath: string

Path to the worker file.

+
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

+
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

+
opts: PoolOptions<Worker>

Options for the pool.

+
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

+
    +
  • key: The message id of each submitted task.
  • +
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • +
+

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

+
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

+
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

+

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    +

    Returns boolean

    The pool back pressure boolean status.

    +
  • get busy(): boolean
  • Whether the pool is busy or not.

    +

    Returns boolean

    The pool busyness boolean status.

    +
  • get type(): "fixed" | "dynamic"
  • The pool type.

    +

    If it is 'dynamic', it provides the max property.

    +

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    +

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    +
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    +
  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/src.DynamicThreadPool.html b/docs/classes/src.DynamicThreadPool.html new file mode 100644 index 00000000..cf817a02 --- /dev/null +++ b/docs/classes/src.DynamicThreadPool.html @@ -0,0 +1,167 @@ +DynamicThreadPool | poolifier - v4.4.4

Class DynamicThreadPool<Data, Response>

A thread pool with a dynamic number of threads, but a guaranteed minimum number of threads.

+

This thread pool creates new threads when the others are busy, up to the maximum number of threads. +When the maximum number of threads is reached and workers are busy, an event is emitted. If you want to listen to this event, use the pool's emitter.

+

0.0.1

+

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. +The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

+

Events that can currently be listened to:

+
    +
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • +
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • +
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • +
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • +
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • +
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • +
  • 'destroy': Emitted when the pool is destroyed.
  • +
  • 'error': Emitted when an uncaught error occurs.
  • +
  • 'taskError': Emitted when an error occurs while executing a task.
  • +
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • +
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • +
+
filePath: string

Path to the worker file.

+
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

+
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

+
opts: PoolOptions<Worker>

Options for the pool.

+
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

+
    +
  • key: The message id of each submitted task.
  • +
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • +
+

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

+
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

+
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

+

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    +

    Returns boolean

    The pool back pressure boolean status.

    +
  • get busy(): boolean
  • Whether the pool is busy or not.

    +

    Returns boolean

    The pool busyness boolean status.

    +
  • get type(): "fixed" | "dynamic"
  • The pool type.

    +

    If it is 'dynamic', it provides the max property.

    +

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    +

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    +
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    +
  • Sends a message to worker given its worker node key.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • message: MessageValue<Data, unknown>

      The message.

      +
    • OptionaltransferList: readonly TransferListItem[]

      The optional array of transferable objects.

      +

    Returns void

  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/src.FixedClusterPool.html b/docs/classes/src.FixedClusterPool.html new file mode 100644 index 00000000..3710db60 --- /dev/null +++ b/docs/classes/src.FixedClusterPool.html @@ -0,0 +1,164 @@ +FixedClusterPool | poolifier - v4.4.4

Class FixedClusterPool<Data, Response>

A cluster pool with a fixed number of workers.

+

2.0.0

+

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. +The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

+

Events that can currently be listened to:

+
    +
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • +
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • +
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • +
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • +
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • +
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • +
  • 'destroy': Emitted when the pool is destroyed.
  • +
  • 'error': Emitted when an uncaught error occurs.
  • +
  • 'taskError': Emitted when an error occurs while executing a task.
  • +
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • +
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • +
+
filePath: string

Path to the worker file.

+
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

+
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

+
opts: PoolOptions<Worker>

Options for the pool.

+
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

+
    +
  • key: The message id of each submitted task.
  • +
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • +
+

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

+
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

+
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

+

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    +

    Returns boolean

    The pool back pressure boolean status.

    +
  • get busy(): boolean
  • Whether the pool is busy or not.

    +

    Returns boolean

    The pool busyness boolean status.

    +
  • get type(): "fixed" | "dynamic"
  • The pool type.

    +

    If it is 'dynamic', it provides the max property.

    +

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    +

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    +
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    +
  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/src.FixedThreadPool.html b/docs/classes/src.FixedThreadPool.html new file mode 100644 index 00000000..40ccc00c --- /dev/null +++ b/docs/classes/src.FixedThreadPool.html @@ -0,0 +1,165 @@ +FixedThreadPool | poolifier - v4.4.4

Class FixedThreadPool<Data, Response>

A thread pool with a fixed number of threads.

+

0.0.1

+

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. +The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

+

Events that can currently be listened to:

+
    +
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • +
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • +
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • +
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • +
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • +
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • +
  • 'destroy': Emitted when the pool is destroyed.
  • +
  • 'error': Emitted when an uncaught error occurs.
  • +
  • 'taskError': Emitted when an error occurs while executing a task.
  • +
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • +
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • +
+
filePath: string

Path to the worker file.

+
maximumNumberOfWorkers?: number

Maximum number of workers that this pool manages.

+
minimumNumberOfWorkers: number

Minimum number of workers that this pool manages.

+
opts: PoolOptions<Worker>

Options for the pool.

+
promiseResponseMap: Map<`${string}-${string}-${string}-${string}-${string}`, PromiseResponseWrapper<Response>> = ...

The task execution response promise map:

+
    +
  • key: The message id of each submitted task.
  • +
  • value: An object that contains task's worker node key, execution response promise resolve and reject callbacks, async resource.
  • +
+

When we receive a message from the worker, we get a map entry with the promise resolve/reject bound to the message id.

+
workerChoiceStrategiesContext?: WorkerChoiceStrategiesContext<Worker, Data, Response>

Worker choice strategies context referencing worker choice algorithms implementation.

+
workerNodes: IWorkerNode<Worker, Data>[] = []

Pool worker nodes.

+

Accessors

  • get backPressure(): boolean
  • Whether the pool is back pressured or not.

    +

    Returns boolean

    The pool back pressure boolean status.

    +
  • get busy(): boolean
  • Whether the pool is busy or not.

    +

    Returns boolean

    The pool busyness boolean status.

    +
  • get type(): "fixed" | "dynamic"
  • The pool type.

    +

    If it is 'dynamic', it provides the max property.

    +

    Returns "fixed" | "dynamic"

  • get worker(): "cluster" | "thread"
  • The worker type.

    +

    Returns "cluster" | "thread"

Methods

  • Parameters

    • Optionaldata: Data

      The optional task input data for the specified task function. This can only be structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response>

    Promise with a task function response that will be fulfilled when the task is completed.

    +
  • Parameters

    • data: Iterable<Data, any, any>

      The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      +
    • Optionalname: string

      The optional name of the task function to execute. If not specified, the default task function will be executed.

      +
    • OptionaltransferList: readonly TransferListItem[]

      An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      +

    Returns Promise<Response[]>

    Promise with an array of task function responses that will be fulfilled when the tasks are completed.

    +
  • Sends a message to worker given its worker node key.

    +

    Parameters

    • workerNodeKey: number

      The worker node key.

      +
    • message: MessageValue<Data, unknown>

      The message.

      +
    • OptionaltransferList: readonly TransferListItem[]

      The optional array of transferable objects.

      +

    Returns void

  • Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"
    • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

    Returns void

diff --git a/docs/classes/src.PriorityQueue.html b/docs/classes/src.PriorityQueue.html new file mode 100644 index 00000000..870c329b --- /dev/null +++ b/docs/classes/src.PriorityQueue.html @@ -0,0 +1,42 @@ +PriorityQueue | poolifier - v4.4.4

Class PriorityQueue<T>Internal

Priority queue.

+

Type Parameters

  • T

    Type of priority queue data.

    +

Constructors

Properties

Accessors

Methods

Constructors

  • Constructs a priority queue.

    +

    Type Parameters

    • T

    Parameters

    • bucketSize: number = defaultBucketSize

      Prioritized bucket size.

      +
    • enablePriority: boolean = false

      Whether to enable priority.

      +

    Returns PriorityQueue<T>

    PriorityQueue.

    +
    defaultBucketSize
    +
    + +
    false
    +
    + +

Properties

maxSize: number

The priority queue maximum size.

+

Accessors

  • get buckets(): number
  • The number of filled prioritized buckets.

    +

    Returns number

    The number of filled prioritized buckets.

    +
  • get enablePriority(): boolean
  • Whether priority is enabled.

    +

    Returns boolean

    Whether priority is enabled.

    +
  • set enablePriority(enablePriority): void
  • Enables/disables priority.

    +

    Parameters

    • enablePriority: boolean

      Whether to enable priority.

      +

    Returns void

Methods

  • Dequeue data from the priority queue.

    +

    Parameters

    • Optionalbucket: number

      The prioritized bucket to dequeue from.

      +

    Returns undefined | T

    The dequeued data or undefined if the priority queue is empty.

    +
  • Enqueue data into the priority queue.

    +

    Parameters

    • data: T

      Data to enqueue.

      +
    • Optionalpriority: number

      Priority of the data. Lower values have higher priority.

      +

    Returns number

    The new size of the priority queue.

    +
diff --git a/docs/classes/src.ThreadWorker.html b/docs/classes/src.ThreadWorker.html new file mode 100644 index 00000000..1bb7dbb6 --- /dev/null +++ b/docs/classes/src.ThreadWorker.html @@ -0,0 +1,83 @@ +ThreadWorker | poolifier - v4.4.4

Class ThreadWorker<Data, Response>

A thread worker used by a poolifier ThreadPool.

+

When this worker is inactive for more than the given maxInactiveTime, +it will send a termination request to its main thread.

+

If you use a DynamicThreadPool the extra workers that were created will be terminated, +but the minimum number of workers will be guaranteed.

+

0.0.1

+

Type Parameters

  • Data = unknown

    Type of data this worker receives from pool's execution. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of response the worker sends back to the main thread. This can only be structured-cloneable data.

    +

Hierarchy (view full)

Constructors

Properties

activeInterval?: Timeout

Handler id of the activeInterval worker activity check.

+
isMain: undefined | boolean

Whether this is the main worker or not.

+
lastTaskTimestamp: number

Timestamp of the last task processed by this worker.

+
opts: WorkerOptions = DEFAULT_WORKER_OPTIONS

Options for the worker.

+
statistics?: WorkerStatistics

Performance statistics computation requirements.

+
taskFunctions: Map<string, TaskFunctionObject<Data, Response>>

Task function object(s) processed by the worker when the pool's execute method is invoked.

+

Accessors

Methods

  • Handles a worker error.

    +

    Parameters

    • error: Error

      The error raised by the worker.

      +

    Returns {
        error: Error;
        message: string;
        stack?: string;
    }

    The worker error object.

    +
    • error: Error
    • message: string
    • Optionalstack?: string
diff --git a/docs/classes/src.WorkerChoiceStrategiesContext.html b/docs/classes/src.WorkerChoiceStrategiesContext.html new file mode 100644 index 00000000..a6bd7457 --- /dev/null +++ b/docs/classes/src.WorkerChoiceStrategiesContext.html @@ -0,0 +1,48 @@ +WorkerChoiceStrategiesContext | poolifier - v4.4.4

Class WorkerChoiceStrategiesContext<Worker, Data, Response>Internal

The worker choice strategies context.

+

Type Parameters

  • Worker extends IWorker

    Type of worker.

    +
  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Constructors

Properties

retriesCount: number

The number of worker choice strategies execution retries.

+

Methods

  • Executes the given worker choice strategy in the context algorithm.

    +

    Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN" = ...

      The worker choice strategy algorithm to execute.

      +

    Returns number

    The key of the worker node.

    +
    this.defaultWorkerChoiceStrategy
    +
    + +

    https://nodejs.org/api/errors.html#class-error If after computed retries the worker node key is null or undefined.

    +
  • Sets the default worker choice strategy to use in the context.

    +

    Parameters

    • workerChoiceStrategy:
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN"

      The default worker choice strategy to set.

      +
    • Optionalopts: WorkerChoiceStrategyOptions

      The worker choice strategy options.

      +

    Returns void

  • Synchronizes the active worker choice strategies in the context with the given worker choice strategies.

    +

    Parameters

    • workerChoiceStrategies: Set<
          | "FAIR_SHARE"
          | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
          | "LEAST_BUSY"
          | "LEAST_ELU"
          | "LEAST_USED"
          | "ROUND_ROBIN"
          | "WEIGHTED_ROUND_ROBIN">

      The worker choice strategies to synchronize.

      +
    • Optionalopts: WorkerChoiceStrategyOptions

      The worker choice strategy options.

      +

    Returns void

diff --git a/docs/documents/api.html b/docs/documents/api.html new file mode 100644 index 00000000..51af4164 --- /dev/null +++ b/docs/documents/api.html @@ -0,0 +1,174 @@ +api | poolifier - v4.4.4

API

+

numberOfThreads/numberOfWorkers (mandatory) Number of workers for this pool.
+filePath (mandatory) Path to a file with a worker implementation.
+opts (optional) An object with the pool options properties described below.

+

min (mandatory) Same as FixedThreadPool/FixedClusterPool numberOfThreads/numberOfWorkers, this number of workers will be always active.
+max (mandatory) Max number of workers that this pool can contain, the newly created workers will die after a threshold (default is 1 minute, you can override it in your worker implementation).
+filePath (mandatory) Path to a file with a worker implementation.
+opts (optional) An object with the pool options properties described below.

+

data (optional) An object that you want to pass to your worker task function implementation.
+name (optional) A string with the task function name that you want to execute on the worker. Default: 'default'
+transferList (optional) An array of transferable objects that you want to transfer to your ThreadWorker worker implementation.

+

This method is available on both pool implementations and returns a promise with the task function execution response.

+

data Iterable objects that you want to pass to your worker task function implementation.
+name (optional) A string with the task function name that you want to execute on the worker. Default: 'default'
+transferList (optional) An array of transferable objects that you want to transfer to your ThreadWorker worker implementation.

+

This method is available on both pool implementations and returns a promise with the task function execution responses array.

+

This method is available on both pool implementations and will start the minimum number of workers.

+

This method is available on both pool implementations and will call the terminate method on each worker.

+

name (mandatory) The task function name.

+

This method is available on both pool implementations and returns a boolean.

+

name (mandatory) The task function name.
+fn (mandatory) The task function (data?: Data) => Response | Promise<Response> or task function object { taskFunction: (data?: Data) => Response | Promise<Response>, priority?: number, strategy?: WorkerChoiceStrategy }. Priority range is the same as Unix nice levels.

+

This method is available on both pool implementations and returns a boolean promise.

+

name (mandatory) The task function name.

+

This method is available on both pool implementations and returns a boolean promise.

+

This method is available on both pool implementations and returns an array of the task function properties.

+

name (mandatory) The task function name.

+

This method is available on both pool implementations and returns a boolean promise.

+

An object with these properties:

+
    +
  • +

    onlineHandler (optional) - A function that will listen for online event on each worker.
    +Default: () => {}

    +
  • +
  • +

    messageHandler (optional) - A function that will listen for message event on each worker.
    +Default: () => {}

    +
  • +
  • +

    errorHandler (optional) - A function that will listen for error event on each worker.
    +Default: () => {}

    +
  • +
  • +

    exitHandler (optional) - A function that will listen for exit event on each worker.
    +Default: () => {}

    +
  • +
  • +

    workerChoiceStrategy (optional) - The default worker choice strategy to use in this pool:

    +
      +
    • WorkerChoiceStrategies.ROUND_ROBIN: Submit tasks to worker in a round robin fashion
    • +
    • WorkerChoiceStrategies.LEAST_USED: Submit tasks to the worker with the minimum number of executing and queued tasks
    • +
    • WorkerChoiceStrategies.LEAST_BUSY: Submit tasks to the worker with the minimum tasks execution time
    • +
    • WorkerChoiceStrategies.LEAST_ELU: Submit tasks to the worker with the minimum event loop utilization (ELU)
    • +
    • WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN: Submit tasks to worker by using a weighted round robin scheduling algorithm based on tasks execution time
    • +
    • WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN: Submit tasks to worker by using an interleaved weighted round robin scheduling algorithm based on tasks execution time (experimental)
    • +
    • WorkerChoiceStrategies.FAIR_SHARE: Submit tasks to worker by using a fair share scheduling algorithm based on tasks execution time (the default) or ELU active time
    • +
    +

    WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN, WorkerChoiceStrategies.INTERLEAVED_WEIGHTED_ROUND_ROBIN and WorkerChoiceStrategies.FAIR_SHARE strategies are targeted to heavy and long tasks.
    +Default: WorkerChoiceStrategies.ROUND_ROBIN

    +
  • +
  • +

    workerChoiceStrategyOptions (optional) - The worker choice strategy options object to use in this pool.
    +Properties:

    +
      +
    • measurement (optional) - The measurement to use in worker choice strategies: runTime, waitTime or elu.
    • +
    • runTime (optional) - Use the tasks simple moving median runtime instead of the tasks simple moving average runtime in worker choice strategies.
    • +
    • waitTime (optional) - Use the tasks simple moving median wait time instead of the tasks simple moving average wait time in worker choice strategies.
    • +
    • elu (optional) - Use the tasks simple moving median ELU instead of the tasks simple moving average ELU in worker choice strategies.
    • +
    • weights (optional) - The worker weights to use in weighted round robin worker choice strategies: Record<number, number>.
    • +
    +

    Default: { runTime: { median: false }, waitTime: { median: false }, elu: { median: false } }

    +
  • +
  • +

    startWorkers (optional) - Start the minimum number of workers at pool initialization.
    +Default: true

    +
  • +
  • +

    restartWorkerOnError (optional) - Restart worker on uncaught error in this pool.
    +Default: true

    +
  • +
  • +

    enableEvents (optional) - Pool events integrated with async resource emission enablement.
    +Default: true

    +
  • +
  • +

    enableTasksQueue (optional) - Tasks queue per worker enablement in this pool.
    +Default: false

    +
  • +
  • +

    tasksQueueOptions (optional) - The worker tasks queue options object to use in this pool.
    +Properties:

    +
      +
    • size (optional) - The maximum number of tasks that can be queued on a worker before flagging it as back pressured. It must be a positive integer.
    • +
    • concurrency (optional) - The maximum number of tasks that can be executed concurrently on a worker. It must be a positive integer.
    • +
    • taskStealing (optional) - Task stealing enablement on idle.
    • +
    • tasksStealingOnBackPressure (optional) - Tasks stealing enablement under back pressure.
    • +
    • tasksStealingRatio (optional) - The ratio of worker nodes that can steal tasks from another worker node. It must be a number between 0 and 1.
    • +
    • tasksFinishedTimeout (optional) - Queued tasks finished timeout in milliseconds at worker termination.
    • +
    +

    Default: { size: (pool maximum size)^2, concurrency: 1, taskStealing: true, tasksStealingOnBackPressure: true, tasksStealingRatio: 0.6, tasksFinishedTimeout: 2000 }

    +
  • +
  • +

    workerOptions (optional) - An object with the worker options to pass to worker. See worker_threads for more details.

    +
  • +
  • +

    env (optional) - An object with the environment variables to pass to worker. See cluster for more details.

    +
  • +
  • +

    settings (optional) - An object with the cluster settings. See cluster for more details.

    +
  • +
+

taskFunctions (mandatory) The task function or task functions object Record<string, (data?: Data) => Response | Promise<Response> | { taskFunction: (data?: Data) => Response | Promise<Response>, priority?: number, strategy?: WorkerChoiceStrategy }> that you want to execute on the worker. Priority range is the same as Unix nice levels.
+opts (optional) An object with these properties:

+
    +
  • +

    killBehavior (optional) - Dictates if your worker will be deleted in case a task is active on it.
    +KillBehaviors.SOFT: If currentTime - lastActiveTime is greater than maxInactiveTime but the worker is stealing tasks or a task is executing or queued, then the worker won't be deleted.
    +KillBehaviors.HARD: If currentTime - lastActiveTime is greater than maxInactiveTime but the worker is stealing tasks or a task is executing or queued, then the worker will be deleted.
    +This option only apply to the newly created workers.
    +Default: KillBehaviors.SOFT

    +
  • +
  • +

    maxInactiveTime (optional) - Maximum waiting time in milliseconds for tasks on newly created workers. After this time newly created workers will die. It must be a positive integer greater or equal than 5.
    +The last active time of your worker will be updated when it terminates a task.
    +If killBehavior is set to KillBehaviors.HARD this value represents also the timeout for the tasks that you submit to the pool, when this timeout expires your tasks is interrupted before completion and removed. The worker is killed if is not part of the minimum size of the pool.
    +If killBehavior is set to KillBehaviors.SOFT your tasks have no timeout and your workers will not be terminated until your task is completed.
    +Default: 60000

    +
  • +
  • +

    killHandler (optional) - A function that will be called when a worker is killed.
    +Default: () => {}

    +
  • +
+

name (mandatory) The task function name.

+

This method is available on both worker implementations and returns { status: boolean, error?: Error }.

+

name (mandatory) The task function name.
+fn (mandatory) The task function (data?: Data) => Response | Promise<Response> or task function object { taskFunction: (data?: Data) => Response | Promise<Response>, priority?: number, strategy?: WorkerChoiceStrategy }. Priority range is the same as Unix nice levels.

+

This method is available on both worker implementations and returns { status: boolean, error?: Error }.

+

name (mandatory) The task function name.

+

This method is available on both worker implementations and returns { status: boolean, error?: Error }.

+

This method is available on both worker implementations and returns an array of the task function properties.

+

name (mandatory) The task function name.

+

This method is available on both worker implementations and returns { status: boolean, error?: Error }.

+
diff --git a/docs/documents/general_guidelines.html b/docs/documents/general_guidelines.html new file mode 100644 index 00000000..1a42b08a --- /dev/null +++ b/docs/documents/general_guidelines.html @@ -0,0 +1,30 @@ +general-guidelines | poolifier - v4.4.4

General guidelines

Performance is one of the main target of these worker pool implementations, poolifier team wants to have a strong focus on this.
+Poolifier already has benchmarks where you can find some comparisons.

+ +

Before to jump into each poolifier pool type, let highlight that Node.js comes with a thread pool already, the libuv thread pool where some particular tasks already run by default.
+Please take a look at which tasks run on the libuv thread pool.

+

If your task runs on libuv thread pool, you can try to:

+ +

and/or

+
    +
  • Use poolifier cluster pools that are spawning child processes, they will also increase the number of libuv threads since that any new child process comes with a separated libuv thread pool. More threads does not mean more fast, so please tune your application.
  • +
+

If your task does not run into libuv thread pool and is CPU intensive then poolifier thread pools (FixedThreadPool and DynamicThreadPool) are suggested to run CPU intensive tasks, you can still run I/O intensive tasks into thread pools, but performance enhancement is expected to be minimal.
+Thread pools are built on top of Node.js worker_threads module.

+

If your task does not run into libuv thread pool and is I/O intensive then poolifier cluster pools (FixedClusterPool and DynamicClusterPool) are suggested to run I/O intensive tasks, again you can still run CPU intensive tasks into cluster pools, but performance enhancement is expected to be minimal.
+Consider that by default Node.js already has great performance for I/O tasks (asynchronous I/O).
+Cluster pools are built on top of Node.js cluster module.

+

If your task contains code that runs on libuv plus code that is CPU intensive or I/O intensive you either split it either combine more strategies (i.e. tune the number of libuv threads and use cluster/thread pools).
+But in general, always profile your application.

+

To choose your pool consider first that with a FixedThreadPool/FixedClusterPool or a DynamicThreadPool/DynamicClusterPool your application memory footprint will increase.
+By doing so, your application will be ready to execute in parallel more tasks, but during idle time your application will consume more memory.
+One good choice from poolifier team point of view is to profile your application using a fixed or dynamic worker pool, and analyze your application metrics when you increase/decrease the number of workers.
+For example you could keep the memory footprint low by choosing a DynamicThreadPool/DynamicClusterPool with a minimum of 5 workers, and allowing it to create new workers until a maximum of 50 workers if needed. This is the advantage of using a DynamicThreadPool/DynamicClusterPool.
+But in general, always profile your application.

+
diff --git a/docs/documents/worker_choice_strategies.html b/docs/documents/worker_choice_strategies.html new file mode 100644 index 00000000..8530975e --- /dev/null +++ b/docs/documents/worker_choice_strategies.html @@ -0,0 +1,24 @@ +worker-choice-strategies | poolifier - v4.4.4

Worker choice strategies

All duration or timestamp are expressed in milliseconds.

+ +

Its goal is to distribute the load evenly across all workers. To achieve this, the strategy keeps track of the simple moving average task execution time for each worker and assigns the next task to the worker with the lowest task end prediction time: task_end_prediction = max(current_time, task_end_prediction) + simple_moving_average_task_execution_time.
+By default, the strategy uses the simple moving average task execution time for each worker but it can be configured to use the simple moving average task event loop utilization (ELU) active time instead.

+

The worker weights are maximum tasks execution time. Once the worker has reached its maximum tasks execution time, the next task is assigned to the next worker. The default worker weight is the same for each and computed given the CPU cores speed and theirs numbers.

+

The worker weights are maximum tasks execution time. The rounds are the deduplicated worker weights in ascending order.
+During a round, if the worker weight is superior or equal to the current round weight and its tasks execution time is inferior to the current round weight, the task is assigned to the worker. Once all workers weight have been tested, the next round starts.
+The default worker weights is the same for each and computed given the CPU cores speed and theirs numbers. So the default 'rounds' consists of a unique worker weight.

+

Worker choice strategies enable only the statistics that are needed to choose the next worker to avoid unnecessary overhead.

+

Strategies using the simple moving average task execution time for each worker can use the simple moving median instead. Simple moving median is more robust to outliers and can be used to avoid assigning tasks to workers that are currently overloaded.

+
diff --git a/docs/functions/availableParallelism.html b/docs/functions/availableParallelism.html deleted file mode 100644 index e202a7b1..00000000 --- a/docs/functions/availableParallelism.html +++ /dev/null @@ -1,4 +0,0 @@ -availableParallelism | poolifier - v4.4.4

Function availableParallelism

Returns safe host OS optimized estimate of the default amount of parallelism a pool should use. -Always returns a value greater than zero.

-
  • Returns number

    The host OS optimized maximum pool size.

    -
diff --git a/docs/functions/src.availableParallelism.html b/docs/functions/src.availableParallelism.html new file mode 100644 index 00000000..3ff4cd3d --- /dev/null +++ b/docs/functions/src.availableParallelism.html @@ -0,0 +1,4 @@ +availableParallelism | poolifier - v4.4.4

Function availableParallelism

Returns safe host OS optimized estimate of the default amount of parallelism a pool should use. +Always returns a value greater than zero.

+
  • Returns number

    The host OS optimized maximum pool size.

    +
diff --git a/docs/hierarchy.html b/docs/hierarchy.html index 45d0fa1d..d2bdab4b 100644 --- a/docs/hierarchy.html +++ b/docs/hierarchy.html @@ -1 +1 @@ -poolifier - v4.4.4
+poolifier - v4.4.4
diff --git a/docs/index.html b/docs/index.html index aeab71b2..28af323b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,70 +1,5 @@ -poolifier - v4.4.4

poolifier - v4.4.4

Index

Classes

Interfaces

Type Aliases

Variables

Functions

availableParallelism +poolifier - v4.4.4

poolifier - v4.4.4

Index

Documents

Modules

diff --git a/docs/interfaces/EventLoopUtilizationMeasurementStatistics.html b/docs/interfaces/EventLoopUtilizationMeasurementStatistics.html deleted file mode 100644 index c1b43016..00000000 --- a/docs/interfaces/EventLoopUtilizationMeasurementStatistics.html +++ /dev/null @@ -1,5 +0,0 @@ -EventLoopUtilizationMeasurementStatistics | poolifier - v4.4.4

Interface EventLoopUtilizationMeasurementStatisticsInternal

Event loop utilization measurement statistics.

-
interface EventLoopUtilizationMeasurementStatistics {
    active: MeasurementStatistics;
    idle: MeasurementStatistics;
    utilization?: number;
}

Properties

Properties

utilization?: number
diff --git a/docs/interfaces/FixedQueueNode.html b/docs/interfaces/FixedQueueNode.html deleted file mode 100644 index fa5e246e..00000000 --- a/docs/interfaces/FixedQueueNode.html +++ /dev/null @@ -1,5 +0,0 @@ -FixedQueueNode | poolifier - v4.4.4

Interface FixedQueueNode<T>Internal

Fixed queue node.

-
interface FixedQueueNode<T> {
    data: T;
    priority: number;
}

Type Parameters

  • T

    Type of fixed queue node data.

    -

Properties

Properties

data: T
priority: number
diff --git a/docs/interfaces/IFixedQueue.html b/docs/interfaces/IFixedQueue.html deleted file mode 100644 index 7602a95b..00000000 --- a/docs/interfaces/IFixedQueue.html +++ /dev/null @@ -1,34 +0,0 @@ -IFixedQueue | poolifier - v4.4.4

Interface IFixedQueue<T>Internal

Fixed queue.

-
interface IFixedQueue<T> {
    [iterator]: (() => Iterator<T, any, any>);
    capacity: number;
    clear: (() => void);
    dequeue: (() => undefined | T);
    empty: (() => boolean);
    enqueue: ((data: T, priority?: number) => number);
    full: (() => boolean);
    get: ((index: number) => undefined | T);
    nodeArray: FixedQueueNode<T>[];
    size: number;
}

Type Parameters

  • T

    Type of fixed queue data.

    -

Properties

[iterator]: (() => Iterator<T, any, any>)

Returns an iterator for the fixed queue.

-

Type declaration

    • (): Iterator<T, any, any>
    • Returns Iterator<T, any, any>

      An iterator for the fixed queue.

      -
capacity: number

The fixed queue capacity.

-
clear: (() => void)

Clears the fixed queue.

-
dequeue: (() => undefined | T)

Dequeue data from the fixed queue.

-

Type declaration

    • (): undefined | T
    • Returns undefined | T

      The dequeued data or undefined if the fixed queue is empty.

      -
empty: (() => boolean)

Checks if the fixed queue is empty.

-

Type declaration

    • (): boolean
    • Returns boolean

      true if the fixed queue is empty, false otherwise.

      -
enqueue: ((data: T, priority?: number) => number)

Enqueue data into the fixed queue.

-

Type declaration

    • (data, priority?): number
    • Parameters

      • data: T

        Data to enqueue.

        -
      • Optionalpriority: number

        Priority of the data. Lower values have higher priority.

        -

      Returns number

      The new size of the fixed queue.

      -

If the fixed queue is full.

-
full: (() => boolean)

Checks if the fixed queue is full.

-

Type declaration

    • (): boolean
    • Returns boolean

      true if the fixed queue is full, false otherwise.

      -
get: ((index: number) => undefined | T)

Gets data from the fixed queue.

-

Type declaration

    • (index): undefined | T
    • Parameters

      • index: number

        The index of the data to get.

        -

      Returns undefined | T

      The data at the index or undefined if the fixed queue is empty or the index is out of bounds.

      -
nodeArray: FixedQueueNode<T>[]

The fixed queue node array.

-
size: number

The fixed queue size.

-
diff --git a/docs/interfaces/IPool.html b/docs/interfaces/IPool.html deleted file mode 100644 index 35e773f1..00000000 --- a/docs/interfaces/IPool.html +++ /dev/null @@ -1,80 +0,0 @@ -IPool | poolifier - v4.4.4

Interface IPool<Worker, Data, Response>

Contract definition for a poolifier pool.

-
interface IPool<Worker, Data, Response> {
    addTaskFunction: ((name: string, fn: TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>) => Promise<boolean>);
    destroy: (() => Promise<void>);
    emitter?: EventEmitterAsyncResource;
    enableTasksQueue: ((enable: boolean, tasksQueueOptions?: TasksQueueOptions) => void);
    execute: ((data?: Data, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response>);
    hasTaskFunction: ((name: string) => boolean);
    info: PoolInfo;
    listTaskFunctionsProperties: (() => TaskFunctionProperties[]);
    mapExecute: ((data: Iterable<Data, any, any>, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response[]>);
    removeTaskFunction: ((name: string) => Promise<boolean>);
    setDefaultTaskFunction: ((name: string) => Promise<boolean>);
    setTasksQueueOptions: ((tasksQueueOptions: TasksQueueOptions) => void);
    setWorkerChoiceStrategy: ((workerChoiceStrategy:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN", workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions) => void);
    setWorkerChoiceStrategyOptions: ((workerChoiceStrategyOptions: WorkerChoiceStrategyOptions) => boolean);
    start: (() => void);
    workerNodes: IWorkerNode<Worker, Data>[];
}

Type Parameters

  • Worker extends IWorker

    Type of worker which manages this pool.

    -
  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Implemented by

Properties

addTaskFunction: ((name: string, fn: TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>) => Promise<boolean>)

Adds a task function to this pool. -If a task function with the same name already exists, it will be overwritten.

-

Type declaration

https://nodejs.org/api/errors.html#class-typeerror If the name parameter is not a string or an empty string.

-

https://nodejs.org/api/errors.html#class-typeerror If the fn parameter is not a function or task function object.

-
destroy: (() => Promise<void>)

Terminates all workers in this pool.

-
emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. -The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

-

Events that can currently be listened to:

-
    -
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • -
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • -
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • -
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • -
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • -
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • -
  • 'destroy': Emitted when the pool is destroyed.
  • -
  • 'error': Emitted when an uncaught error occurs.
  • -
  • 'taskError': Emitted when an error occurs while executing a task.
  • -
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • -
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • -
-
enableTasksQueue: ((enable: boolean, tasksQueueOptions?: TasksQueueOptions) => void)

Enables/disables the worker node tasks queue in this pool.

-

Type declaration

    • (enable, tasksQueueOptions?): void
    • Parameters

      • enable: boolean

        Whether to enable or disable the worker node tasks queue.

        -
      • OptionaltasksQueueOptions: TasksQueueOptions

        The worker node tasks queue options.

        -

      Returns void

execute: ((data?: Data, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response>)

Executes the specified function in the worker constructor with the task data input parameter.

-

Type declaration

    • (data?, name?, transferList?): Promise<Response>
    • Parameters

      • Optionaldata: Data

        The optional task input data for the specified task function. This can only be structured-cloneable data.

        -
      • Optionalname: string

        The optional name of the task function to execute. If not specified, the default task function will be executed.

        -
      • OptionaltransferList: readonly TransferListItem[]

        An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

        -

      Returns Promise<Response>

      Promise with a task function response that will be fulfilled when the task is completed.

      -
hasTaskFunction: ((name: string) => boolean)

Whether the specified task function exists in this pool.

-

Type declaration

    • (name): boolean
    • Parameters

      • name: string

        The name of the task function.

        -

      Returns boolean

      true if the task function exists, false otherwise.

      -
info: PoolInfo

Pool information.

-
listTaskFunctionsProperties: (() => TaskFunctionProperties[])

Lists the properties of task functions available in this pool.

-

Type declaration

mapExecute: ((data: Iterable<Data, any, any>, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response[]>)

Executes the specified function in the worker constructor with the tasks data iterable input parameter.

-

Type declaration

    • (data, name?, transferList?): Promise<Response[]>
    • Parameters

      • data: Iterable<Data, any, any>

        The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

        -
      • Optionalname: string

        The optional name of the task function to execute. If not specified, the default task function will be executed.

        -
      • OptionaltransferList: readonly TransferListItem[]

        An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

        -

      Returns Promise<Response[]>

      Promise with an array of task function responses that will be fulfilled when the tasks are completed.

      -
removeTaskFunction: ((name: string) => Promise<boolean>)

Removes a task function from this pool.

-

Type declaration

    • (name): Promise<boolean>
    • Parameters

      • name: string

        The name of the task function.

        -

      Returns Promise<boolean>

      true if the task function was removed, false otherwise.

      -
setDefaultTaskFunction: ((name: string) => Promise<boolean>)

Sets the default task function in this pool.

-

Type declaration

    • (name): Promise<boolean>
    • Parameters

      • name: string

        The name of the task function.

        -

      Returns Promise<boolean>

      true if the default task function was set, false otherwise.

      -
setTasksQueueOptions: ((tasksQueueOptions: TasksQueueOptions) => void)

Sets the worker node tasks queue options in this pool.

-

Type declaration

    • (tasksQueueOptions): void
    • Parameters

      Returns void

setWorkerChoiceStrategy: ((workerChoiceStrategy:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN", workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions) => void)

Sets the default worker choice strategy in this pool.

-

Type declaration

    • (workerChoiceStrategy, workerChoiceStrategyOptions?): void
    • Parameters

      • workerChoiceStrategy:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN"

        The default worker choice strategy.

        -
      • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

        The worker choice strategy options.

        -

      Returns void

setWorkerChoiceStrategyOptions: ((workerChoiceStrategyOptions: WorkerChoiceStrategyOptions) => boolean)

Sets the worker choice strategy options in this pool.

-

Type declaration

    • (workerChoiceStrategyOptions): boolean
    • Parameters

      Returns boolean

      true if the worker choice strategy options were set, false otherwise.

      -
start: (() => void)

Starts the minimum number of workers in this pool.

-
workerNodes: IWorkerNode<Worker, Data>[]

Pool worker nodes.

-
diff --git a/docs/interfaces/IWorkerChoiceStrategy.html b/docs/interfaces/IWorkerChoiceStrategy.html deleted file mode 100644 index 7c12d98a..00000000 --- a/docs/interfaces/IWorkerChoiceStrategy.html +++ /dev/null @@ -1,25 +0,0 @@ -IWorkerChoiceStrategy | poolifier - v4.4.4

Interface IWorkerChoiceStrategyInternal

Worker choice strategy interface.

-
interface IWorkerChoiceStrategy {
    choose: (() => undefined | number);
    remove: ((workerNodeKey: number) => boolean);
    reset: (() => boolean);
    setOptions: ((opts: undefined | WorkerChoiceStrategyOptions) => void);
    strategyPolicy: StrategyPolicy;
    taskStatisticsRequirements: TaskStatisticsRequirements;
    update: ((workerNodeKey: number) => boolean);
}

Properties

choose: (() => undefined | number)

Chooses a worker node in the pool and returns its key. -If no worker nodes are not eligible, undefined is returned. -If undefined is returned, the caller retry.

-

Type declaration

    • (): undefined | number
    • Returns undefined | number

      The worker node key or undefined.

      -
remove: ((workerNodeKey: number) => boolean)

Removes the worker node key from strategy internals.

-

Type declaration

    • (workerNodeKey): boolean
    • Parameters

      • workerNodeKey: number

        The worker node key.

        -

      Returns boolean

      true if the worker node key is removed, false otherwise.

      -
reset: (() => boolean)

Resets strategy internals.

-

Type declaration

    • (): boolean
    • Returns boolean

      true if the reset is successful, false otherwise.

      -
setOptions: ((opts: undefined | WorkerChoiceStrategyOptions) => void)

Sets the worker choice strategy options.

-

Type declaration

strategyPolicy: StrategyPolicy

Strategy policy.

-
taskStatisticsRequirements: TaskStatisticsRequirements

Tasks statistics requirements.

-
update: ((workerNodeKey: number) => boolean)

Updates the worker node key strategy internals. -This is called after a task has been executed on a worker node.

-

Type declaration

    • (workerNodeKey): boolean
    • Parameters

      • workerNodeKey: number

      Returns boolean

      true if the update is successful, false otherwise.

      -
diff --git a/docs/interfaces/MeasurementOptions.html b/docs/interfaces/MeasurementOptions.html deleted file mode 100644 index d0d8104c..00000000 --- a/docs/interfaces/MeasurementOptions.html +++ /dev/null @@ -1,4 +0,0 @@ -MeasurementOptions | poolifier - v4.4.4

Interface MeasurementOptions

Measurement options.

-
interface MeasurementOptions {
    median: boolean;
}

Properties

Properties

median: boolean

Set measurement median.

-
diff --git a/docs/interfaces/MeasurementStatistics.html b/docs/interfaces/MeasurementStatistics.html deleted file mode 100644 index af065ef6..00000000 --- a/docs/interfaces/MeasurementStatistics.html +++ /dev/null @@ -1,14 +0,0 @@ -MeasurementStatistics | poolifier - v4.4.4

Interface MeasurementStatisticsInternal

Measurement statistics.

-
interface MeasurementStatistics {
    aggregate?: number;
    average?: number;
    history: CircularBuffer;
    maximum?: number;
    median?: number;
    minimum?: number;
}

Properties

aggregate?: number

Measurement aggregate.

-
average?: number

Measurement average.

-

Measurement history.

-
maximum?: number

Measurement maximum.

-
median?: number

Measurement median.

-
minimum?: number

Measurement minimum.

-
diff --git a/docs/interfaces/MeasurementStatisticsRequirements.html b/docs/interfaces/MeasurementStatisticsRequirements.html deleted file mode 100644 index 05547bdf..00000000 --- a/docs/interfaces/MeasurementStatisticsRequirements.html +++ /dev/null @@ -1,8 +0,0 @@ -MeasurementStatisticsRequirements | poolifier - v4.4.4

Interface MeasurementStatisticsRequirementsInternal

Measurement statistics requirements.

-
interface MeasurementStatisticsRequirements {
    aggregate: boolean;
    average: boolean;
    median: boolean;
}

Properties

Properties

aggregate: boolean

Requires measurement aggregate.

-
average: boolean

Requires measurement average.

-
median: boolean

Requires measurement median.

-
diff --git a/docs/interfaces/MessageValue.html b/docs/interfaces/MessageValue.html deleted file mode 100644 index 7707667d..00000000 --- a/docs/interfaces/MessageValue.html +++ /dev/null @@ -1,52 +0,0 @@ -MessageValue | poolifier - v4.4.4

Interface MessageValue<Data, ErrorData>Internal

Message object that is passed between main worker and worker.

-
interface MessageValue<Data, ErrorData> {
    checkActive?: boolean;
    data?: Data;
    kill?:
        | true
        | "success"
        | "HARD"
        | "SOFT"
        | "failure";
    name?: string;
    port?: MessagePort;
    priority?: number;
    ready?: boolean;
    statistics?: WorkerStatistics;
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN";
    taskFunction?: string;
    taskFunctionOperation?: "add" | "default" | "remove";
    taskFunctionOperationStatus?: boolean;
    taskFunctionProperties?: TaskFunctionProperties;
    taskFunctionsProperties?: TaskFunctionProperties[];
    taskId?: `${string}-${string}-${string}-${string}-${string}`;
    taskPerformance?: TaskPerformance;
    timestamp?: number;
    transferList?: readonly TransferListItem[];
    workerError?: WorkerError<ErrorData>;
    workerId?: number;
}

Type Parameters

  • Data = unknown

    Type of data sent to the worker or execution response. This can only be structured-cloneable data.

    -
  • ErrorData = unknown

    Type of data sent to the worker triggering an error. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Properties

checkActive?: boolean

Whether the worker starts or stops its activity check.

-
data?: Data

Task input data that will be passed to the worker.

-
kill?:
    | true
    | "success"
    | "HARD"
    | "SOFT"
    | "failure"

Kill code.

-
name?: string

Task name.

-
port?: MessagePort

Message port.

-
priority?: number

Task priority. Lower values have higher priority.

-
0
-
- -
ready?: boolean

Whether the worker is ready or not.

-
statistics?: WorkerStatistics

Whether the worker computes the given statistics or not.

-
strategy?:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN"

Task worker choice strategy.

-
taskFunction?: string

Task function serialized to string.

-
taskFunctionOperation?: "add" | "default" | "remove"

Task function operation:

-
    -
  • 'add' - Add a task function.
  • -
  • 'remove' - Remove a task function.
  • -
  • 'default' - Set a task function as default.
  • -
-
taskFunctionOperationStatus?: boolean

Whether the task function operation is successful or not.

-
taskFunctionProperties?: TaskFunctionProperties

Task function properties.

-
taskFunctionsProperties?: TaskFunctionProperties[]

Task functions properties.

-
taskId?: `${string}-${string}-${string}-${string}-${string}`

Task UUID.

-
taskPerformance?: TaskPerformance

Task performance.

-
timestamp?: number

Timestamp.

-
transferList?: readonly TransferListItem[]

Array of transferable objects.

-
workerError?: WorkerError<ErrorData>

Worker error.

-
workerId?: number

Worker id.

-
diff --git a/docs/interfaces/PoolInfo.html b/docs/interfaces/PoolInfo.html deleted file mode 100644 index 23db13c0..00000000 --- a/docs/interfaces/PoolInfo.html +++ /dev/null @@ -1,35 +0,0 @@ -PoolInfo | poolifier - v4.4.4

Interface PoolInfo

Pool information.

-
interface PoolInfo {
    backPressure?: boolean;
    backPressureWorkerNodes?: number;
    busyWorkerNodes: number;
    defaultStrategy:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN";
    dynamicWorkerNodes?: number;
    elu?: {
        active: {
            average?: number;
            maximum: number;
            median?: number;
            minimum: number;
        };
        idle: {
            average?: number;
            maximum: number;
            median?: number;
            minimum: number;
        };
        utilization: {
            average?: number;
            median?: number;
        };
    };
    executedTasks: number;
    executingTasks: number;
    failedTasks: number;
    idleWorkerNodes: number;
    maxQueuedTasks?: number;
    maxSize: number;
    minSize: number;
    queuedTasks?: number;
    ready: boolean;
    runTime?: {
        average?: number;
        maximum: number;
        median?: number;
        minimum: number;
    };
    started: boolean;
    stealingWorkerNodes?: number;
    stolenTasks?: number;
    strategyRetries: number;
    type: "fixed" | "dynamic";
    utilization?: number;
    version: string;
    waitTime?: {
        average?: number;
        maximum: number;
        median?: number;
        minimum: number;
    };
    worker: "cluster" | "thread";
    workerNodes: number;
}

Properties

backPressure?: boolean
backPressureWorkerNodes?: number

Pool tasks back pressure worker nodes.

-
busyWorkerNodes: number

Pool busy worker nodes.

-
defaultStrategy:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN"
dynamicWorkerNodes?: number

Pool dynamic worker nodes.

-
elu?: {
    active: {
        average?: number;
        maximum: number;
        median?: number;
        minimum: number;
    };
    idle: {
        average?: number;
        maximum: number;
        median?: number;
        minimum: number;
    };
    utilization: {
        average?: number;
        median?: number;
    };
}
executedTasks: number
executingTasks: number
failedTasks: number
idleWorkerNodes: number

Pool idle worker nodes.

-
maxQueuedTasks?: number
maxSize: number
minSize: number
queuedTasks?: number
ready: boolean
runTime?: {
    average?: number;
    maximum: number;
    median?: number;
    minimum: number;
}
started: boolean
stealingWorkerNodes?: number

Pool tasks stealing worker nodes.

-
stolenTasks?: number
strategyRetries: number
type: "fixed" | "dynamic"
utilization?: number

Pool utilization.

-
version: string
waitTime?: {
    average?: number;
    maximum: number;
    median?: number;
    minimum: number;
}
worker: "cluster" | "thread"
workerNodes: number

Pool total worker nodes.

-
diff --git a/docs/interfaces/PoolOptions.html b/docs/interfaces/PoolOptions.html deleted file mode 100644 index b212c1e1..00000000 --- a/docs/interfaces/PoolOptions.html +++ /dev/null @@ -1,50 +0,0 @@ -PoolOptions | poolifier - v4.4.4

Interface PoolOptions<Worker>

Options for a poolifier pool.

-
interface PoolOptions<Worker> {
    enableEvents?: boolean;
    enableTasksQueue?: boolean;
    env?: Record<string, unknown>;
    errorHandler?: ErrorHandler<Worker>;
    exitHandler?: ExitHandler<Worker>;
    messageHandler?: MessageHandler<Worker>;
    onlineHandler?: OnlineHandler<Worker>;
    restartWorkerOnError?: boolean;
    settings?: ClusterSettings;
    startWorkers?: boolean;
    tasksQueueOptions?: TasksQueueOptions;
    workerChoiceStrategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN";
    workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions;
    workerOptions?: WorkerOptions;
}

Type Parameters

  • Worker extends IWorker

    Type of worker.

    -

Properties

enableEvents?: boolean

Pool events integrated with async resource emission.

-
true
-
- -
enableTasksQueue?: boolean

Pool worker node tasks queue.

-
false
-
- -
env?: Record<string, unknown>

Key/value pairs to add to worker process environment.

-
errorHandler?: ErrorHandler<Worker>

A function that will listen for error event on each worker.

-

() => {}

-
exitHandler?: ExitHandler<Worker>

A function that will listen for exit event on each worker.

-

() => {}

-
messageHandler?: MessageHandler<Worker>

A function that will listen for message event on each worker.

-

() => {}

-
onlineHandler?: OnlineHandler<Worker>

A function that will listen for online event on each worker.

-

() => {}

-
restartWorkerOnError?: boolean

Restart worker on error.

-
settings?: ClusterSettings

Cluster settings.

-
startWorkers?: boolean

Whether to start the minimum number of workers at pool initialization.

-
true
-
- -
tasksQueueOptions?: TasksQueueOptions

Pool worker node tasks queue options.

-
workerChoiceStrategy?:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN"

The default worker choice strategy to use in this pool.

-
WorkerChoiceStrategies.ROUND_ROBIN
-
- -
workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions

The worker choice strategy options.

-
workerOptions?: WorkerOptions

Worker options.

-
diff --git a/docs/interfaces/PromiseResponseWrapper.html b/docs/interfaces/PromiseResponseWrapper.html deleted file mode 100644 index 90e4bfa7..00000000 --- a/docs/interfaces/PromiseResponseWrapper.html +++ /dev/null @@ -1,11 +0,0 @@ -PromiseResponseWrapper | poolifier - v4.4.4

Interface PromiseResponseWrapper<Response>Internal

An object holding the task execution response promise resolve/reject callbacks.

-
interface PromiseResponseWrapper<Response> {
    asyncResource?: AsyncResource;
    reject: ((reason?: unknown) => void);
    resolve: ((value: Response | PromiseLike<Response>) => void);
    workerNodeKey: number;
}

Type Parameters

  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Properties

asyncResource?: AsyncResource

The asynchronous resource used to track the task execution.

-
reject: ((reason?: unknown) => void)

Reject callback to reject the promise.

-
resolve: ((value: Response | PromiseLike<Response>) => void)

Resolve callback to fulfill the promise.

-
workerNodeKey: number

The worker node key executing the task.

-
diff --git a/docs/interfaces/StrategyData.html b/docs/interfaces/StrategyData.html deleted file mode 100644 index 4c852496..00000000 --- a/docs/interfaces/StrategyData.html +++ /dev/null @@ -1,3 +0,0 @@ -StrategyData | poolifier - v4.4.4

Interface StrategyDataInternal

Worker choice strategy data.

-
interface StrategyData {
    virtualTaskEndTimestamp?: number;
}

Properties

virtualTaskEndTimestamp?: number
diff --git a/docs/interfaces/StrategyPolicy.html b/docs/interfaces/StrategyPolicy.html deleted file mode 100644 index d48a889b..00000000 --- a/docs/interfaces/StrategyPolicy.html +++ /dev/null @@ -1,6 +0,0 @@ -StrategyPolicy | poolifier - v4.4.4

Interface StrategyPolicyInternal

Strategy policy.

-
interface StrategyPolicy {
    dynamicWorkerReady: boolean;
    dynamicWorkerUsage: boolean;
}

Properties

dynamicWorkerReady: boolean

Expects the newly created dynamic worker to be flagged as ready.

-
dynamicWorkerUsage: boolean

Expects tasks execution on the newly created dynamic worker.

-
diff --git a/docs/interfaces/Task.html b/docs/interfaces/Task.html deleted file mode 100644 index 208f6225..00000000 --- a/docs/interfaces/Task.html +++ /dev/null @@ -1,20 +0,0 @@ -Task | poolifier - v4.4.4

Interface Task<Data>Internal

Message object that is passed as a task between main worker and worker.

-
interface Task<Data> {
    data?: Data;
    name?: string;
    priority?: number;
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN";
    taskId?: `${string}-${string}-${string}-${string}-${string}`;
    timestamp?: number;
    transferList?: readonly TransferListItem[];
}

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -

Hierarchy (view full)

Properties

data?: Data

Task input data that will be passed to the worker.

-
name?: string

Task name.

-
priority?: number

Task priority. Lower values have higher priority.

-
0
-
- -
strategy?:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN"

Task worker choice strategy.

-
taskId?: `${string}-${string}-${string}-${string}-${string}`

Task UUID.

-
timestamp?: number

Timestamp.

-
transferList?: readonly TransferListItem[]

Array of transferable objects.

-
diff --git a/docs/interfaces/TaskFunctionObject.html b/docs/interfaces/TaskFunctionObject.html deleted file mode 100644 index ed109501..00000000 --- a/docs/interfaces/TaskFunctionObject.html +++ /dev/null @@ -1,10 +0,0 @@ -TaskFunctionObject | poolifier - v4.4.4

Interface TaskFunctionObject<Data, Response>

Task function object.

-
interface TaskFunctionObject<Data, Response> {
    priority?: number;
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN";
    taskFunction: TaskFunction<Data, Response>;
}

Type Parameters

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    -
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    -

Properties

priority?: number

Task function priority. Lower values have higher priority.

-
strategy?:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN"

Task function worker choice strategy.

-
taskFunction: TaskFunction<Data, Response>

Task function.

-
diff --git a/docs/interfaces/TaskFunctionOperationResult.html b/docs/interfaces/TaskFunctionOperationResult.html deleted file mode 100644 index 182a5c81..00000000 --- a/docs/interfaces/TaskFunctionOperationResult.html +++ /dev/null @@ -1,4 +0,0 @@ -TaskFunctionOperationResult | poolifier - v4.4.4

Interface TaskFunctionOperationResult

Task function operation result.

-
interface TaskFunctionOperationResult {
    error?: Error;
    status: boolean;
}

Properties

Properties

error?: Error
status: boolean
diff --git a/docs/interfaces/TaskFunctionProperties.html b/docs/interfaces/TaskFunctionProperties.html deleted file mode 100644 index 77000a93..00000000 --- a/docs/interfaces/TaskFunctionProperties.html +++ /dev/null @@ -1,8 +0,0 @@ -TaskFunctionProperties | poolifier - v4.4.4

Interface TaskFunctionProperties

Task function properties.

-
interface TaskFunctionProperties {
    name: string;
    priority?: number;
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN";
}

Properties

Properties

name: string

Task function name.

-
priority?: number

Task function priority. Lower values have higher priority.

-
strategy?:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN"

Task function worker choice strategy.

-
diff --git a/docs/interfaces/TaskPerformance.html b/docs/interfaces/TaskPerformance.html deleted file mode 100644 index fb636fb6..00000000 --- a/docs/interfaces/TaskPerformance.html +++ /dev/null @@ -1,10 +0,0 @@ -TaskPerformance | poolifier - v4.4.4

Interface TaskPerformanceInternal

Task performance.

-
interface TaskPerformance {
    elu?: EventLoopUtilization;
    name: string;
    runTime?: number;
    timestamp: number;
}

Properties

Properties

elu?: EventLoopUtilization

Task event loop utilization.

-
name: string

Task name.

-
runTime?: number

Task runtime.

-
timestamp: number

Task performance timestamp.

-
diff --git a/docs/interfaces/TaskStatistics.html b/docs/interfaces/TaskStatistics.html deleted file mode 100644 index 3c11323f..00000000 --- a/docs/interfaces/TaskStatistics.html +++ /dev/null @@ -1,16 +0,0 @@ -TaskStatistics | poolifier - v4.4.4

Interface TaskStatisticsInternal

Task statistics.

-
interface TaskStatistics {
    executed: number;
    executing: number;
    failed: number;
    maxQueued?: number;
    queued: number;
    sequentiallyStolen: number;
    stolen: number;
}

Properties

executed: number

Number of executed tasks.

-
executing: number

Number of executing tasks.

-
failed: number

Number of failed tasks.

-
maxQueued?: number

Maximum number of queued tasks.

-
queued: number

Number of queued tasks.

-
sequentiallyStolen: number

Number of sequentially stolen tasks.

-
stolen: number

Number of stolen tasks.

-
diff --git a/docs/interfaces/TaskStatisticsRequirements.html b/docs/interfaces/TaskStatisticsRequirements.html deleted file mode 100644 index 538920c4..00000000 --- a/docs/interfaces/TaskStatisticsRequirements.html +++ /dev/null @@ -1,8 +0,0 @@ -TaskStatisticsRequirements | poolifier - v4.4.4

Interface TaskStatisticsRequirementsInternal

Pool worker node worker usage statistics requirements.

-
interface TaskStatisticsRequirements {
    elu: MeasurementStatisticsRequirements;
    runTime: MeasurementStatisticsRequirements;
    waitTime: MeasurementStatisticsRequirements;
}

Properties

Properties

Tasks event loop utilization requirements.

-

Tasks runtime requirements.

-

Tasks wait time requirements.

-
diff --git a/docs/interfaces/TasksQueueOptions.html b/docs/interfaces/TasksQueueOptions.html deleted file mode 100644 index 8837ea14..00000000 --- a/docs/interfaces/TasksQueueOptions.html +++ /dev/null @@ -1,32 +0,0 @@ -TasksQueueOptions | poolifier - v4.4.4

Interface TasksQueueOptions

Worker node tasks queue options.

-
interface TasksQueueOptions {
    concurrency?: number;
    size?: number;
    tasksFinishedTimeout?: number;
    tasksStealingOnBackPressure?: boolean;
    tasksStealingRatio?: number;
    taskStealing?: boolean;
}

Properties

concurrency?: number

Maximum number of tasks that can be executed concurrently on a worker node.

-
1
-
- -
size?: number

Maximum tasks queue size per worker node flagging it as back pressured.

-
(pool maximum size)^2
-
- -
tasksFinishedTimeout?: number

Queued tasks finished timeout in milliseconds at worker node termination.

-
2000
-
- -
tasksStealingOnBackPressure?: boolean

Whether to enable tasks stealing under back pressure.

-
true
-
- -
tasksStealingRatio?: number

Ratio of worker nodes that can steal tasks from another worker node.

-
0.6
-
- -
taskStealing?: boolean

Whether to enable task stealing on idle.

-
true
-
- -
diff --git a/docs/interfaces/WorkerChoiceStrategyOptions.html b/docs/interfaces/WorkerChoiceStrategyOptions.html deleted file mode 100644 index 96d6310f..00000000 --- a/docs/interfaces/WorkerChoiceStrategyOptions.html +++ /dev/null @@ -1,25 +0,0 @@ -WorkerChoiceStrategyOptions | poolifier - v4.4.4

Interface WorkerChoiceStrategyOptions

Worker choice strategy options.

-
interface WorkerChoiceStrategyOptions {
    elu?: MeasurementOptions;
    measurement?: "elu" | "runTime" | "waitTime";
    runTime?: MeasurementOptions;
    waitTime?: MeasurementOptions;
    weights?: Record<number, number>;
}

Properties

Event loop utilization options.

-
{ median: false }
-
- -
measurement?: "elu" | "runTime" | "waitTime"

Measurement to use in worker choice strategy supporting it.

-

Runtime options.

-
{ median: false }
-
- -

Wait time options.

-
{ median: false }
-
- -
weights?: Record<number, number>

Worker weights to use for weighted round robin worker selection strategies. -A weight is tasks maximum execution time in milliseconds for a worker node.

-
Weights computed automatically given the CPU performance.
-
- -
diff --git a/docs/interfaces/WorkerError.html b/docs/interfaces/WorkerError.html deleted file mode 100644 index 721b0edb..00000000 --- a/docs/interfaces/WorkerError.html +++ /dev/null @@ -1,13 +0,0 @@ -WorkerError | poolifier - v4.4.4

Interface WorkerError<Data>

Worker error.

-
interface WorkerError<Data> {
    data?: Data;
    error?: Error;
    message: string;
    name?: string;
    stack?: string;
}

Type Parameters

  • Data = unknown

    Type of data sent to the worker triggering an error. This can only be structured-cloneable data.

    -

Properties

Properties

data?: Data

Data triggering the error.

-
error?: Error

Error object.

-
message: string

Error message.

-
name?: string

Task function name triggering the error.

-
stack?: string

Error stack trace.

-
diff --git a/docs/interfaces/WorkerInfo.html b/docs/interfaces/WorkerInfo.html deleted file mode 100644 index 859c3de3..00000000 --- a/docs/interfaces/WorkerInfo.html +++ /dev/null @@ -1,27 +0,0 @@ -WorkerInfo | poolifier - v4.4.4

Interface WorkerInfoInternal

Worker information.

-
interface WorkerInfo {
    backPressure: boolean;
    backPressureStealing: boolean;
    continuousStealing: boolean;
    dynamic: boolean;
    id: undefined | number;
    ready: boolean;
    stealing: boolean;
    stolen: boolean;
    taskFunctionsProperties?: TaskFunctionProperties[];
    type: "cluster" | "thread";
}

Properties

backPressure: boolean

Back pressure flag. -This flag is set to true when worker node tasks queue is back pressured.

-
backPressureStealing: boolean

Back pressure stealing flag. -This flag is set to true when worker node is stealing one task from another back pressured worker node.

-
continuousStealing: boolean

Continuous stealing flag. -This flag is set to true when worker node is continuously stealing tasks from other worker nodes.

-
dynamic: boolean

Dynamic flag.

-
id: undefined | number

Worker id.

-
ready: boolean

Ready flag.

-
stealing: boolean

Stealing flag. -This flag is set to true when worker node is stealing one task from another worker node.

-
stolen: boolean

Stolen flag. -This flag is set to true when worker node has one task stolen from another worker node.

-
taskFunctionsProperties?: TaskFunctionProperties[]

Task functions properties.

-
type: "cluster" | "thread"

Worker type.

-
diff --git a/docs/interfaces/WorkerNodeEventDetail.html b/docs/interfaces/WorkerNodeEventDetail.html deleted file mode 100644 index 2cc36959..00000000 --- a/docs/interfaces/WorkerNodeEventDetail.html +++ /dev/null @@ -1,4 +0,0 @@ -WorkerNodeEventDetail | poolifier - v4.4.4

Interface WorkerNodeEventDetailInternal

Worker node event detail.

-
interface WorkerNodeEventDetail {
    workerId?: number;
    workerNodeKey?: number;
}

Properties

workerId?: number
workerNodeKey?: number
diff --git a/docs/interfaces/WorkerNodeOptions.html b/docs/interfaces/WorkerNodeOptions.html deleted file mode 100644 index 4ccb6b11..00000000 --- a/docs/interfaces/WorkerNodeOptions.html +++ /dev/null @@ -1,7 +0,0 @@ -WorkerNodeOptions | poolifier - v4.4.4

Interface WorkerNodeOptionsInternal

Worker node options.

-
interface WorkerNodeOptions {
    env?: Record<string, unknown>;
    tasksQueueBackPressureSize: undefined | number;
    tasksQueueBucketSize: undefined | number;
    tasksQueuePriority: undefined | boolean;
    workerOptions?: WorkerOptions;
}

Properties

env?: Record<string, unknown>
tasksQueueBackPressureSize: undefined | number
tasksQueueBucketSize: undefined | number
tasksQueuePriority: undefined | boolean
workerOptions?: WorkerOptions
diff --git a/docs/interfaces/WorkerOptions.html b/docs/interfaces/WorkerOptions.html deleted file mode 100644 index 96b08097..00000000 --- a/docs/interfaces/WorkerOptions.html +++ /dev/null @@ -1,27 +0,0 @@ -WorkerOptions | poolifier - v4.4.4

Interface WorkerOptions

Options for workers.

-
interface WorkerOptions {
    killBehavior?: "HARD" | "SOFT";
    killHandler?: KillHandler;
    maxInactiveTime?: number;
}

Properties

killBehavior?: "HARD" | "SOFT"

killBehavior dictates if your worker will be deleted in case a task is active on it.

-
    -
  • SOFT: If currentTime - lastActiveTime is greater than maxInactiveTime but the worker is stealing tasks or a task is executing or queued, then the worker won't be deleted.
  • -
  • HARD: If currentTime - lastActiveTime is greater than maxInactiveTime but the worker is stealing tasks or a task is executing or queued, then the worker will be deleted.
  • -
-

This option only apply to the newly created workers.

-
KillBehaviors.SOFT
-
- -
killHandler?: KillHandler

The function to call when a worker is killed.

-

() => {}

-
maxInactiveTime?: number

Maximum waiting time in milliseconds for tasks on newly created workers. It must be greater or equal than 5.

-

After this time, newly created workers will be terminated. -The last active time of your worker will be updated when it terminates a task.

-
    -
  • If killBehavior is set to KillBehaviors.HARD this value represents also the timeout for the tasks that you submit to the pool, -when this timeout expires your tasks is interrupted before completion and removed. The worker is killed if is not part of the minimum size of the pool.
  • -
  • If killBehavior is set to KillBehaviors.SOFT your tasks have no timeout and your workers will not be terminated until your task is completed.
  • -
-
60000
-
- -
diff --git a/docs/interfaces/WorkerStatistics.html b/docs/interfaces/WorkerStatistics.html deleted file mode 100644 index f3d1f511..00000000 --- a/docs/interfaces/WorkerStatistics.html +++ /dev/null @@ -1,6 +0,0 @@ -WorkerStatistics | poolifier - v4.4.4

Interface WorkerStatisticsInternal

Worker task performance statistics computation settings.

-
interface WorkerStatistics {
    elu: boolean;
    runTime: boolean;
}

Properties

Properties

elu: boolean

Whether the worker computes the task event loop utilization (ELU) or not.

-
runTime: boolean

Whether the worker computes the task runtime or not.

-
diff --git a/docs/interfaces/WorkerUsage.html b/docs/interfaces/WorkerUsage.html deleted file mode 100644 index d2df42cf..00000000 --- a/docs/interfaces/WorkerUsage.html +++ /dev/null @@ -1,10 +0,0 @@ -WorkerUsage | poolifier - v4.4.4

Interface WorkerUsageInternal

Worker usage statistics.

-
interface WorkerUsage {
    elu: EventLoopUtilizationMeasurementStatistics;
    runTime: MeasurementStatistics;
    tasks: TaskStatistics;
    waitTime: MeasurementStatistics;
}

Properties

Properties

Tasks event loop utilization statistics.

-

Tasks runtime statistics.

-

Tasks statistics.

-

Tasks wait time statistics.

-
diff --git a/docs/interfaces/src.EventLoopUtilizationMeasurementStatistics.html b/docs/interfaces/src.EventLoopUtilizationMeasurementStatistics.html new file mode 100644 index 00000000..0195679e --- /dev/null +++ b/docs/interfaces/src.EventLoopUtilizationMeasurementStatistics.html @@ -0,0 +1,5 @@ +EventLoopUtilizationMeasurementStatistics | poolifier - v4.4.4

Interface EventLoopUtilizationMeasurementStatisticsInternal

Event loop utilization measurement statistics.

+
interface EventLoopUtilizationMeasurementStatistics {
    active: MeasurementStatistics;
    idle: MeasurementStatistics;
    utilization?: number;
}

Properties

Properties

utilization?: number
diff --git a/docs/interfaces/src.FixedQueueNode.html b/docs/interfaces/src.FixedQueueNode.html new file mode 100644 index 00000000..8dda11a0 --- /dev/null +++ b/docs/interfaces/src.FixedQueueNode.html @@ -0,0 +1,5 @@ +FixedQueueNode | poolifier - v4.4.4

Interface FixedQueueNode<T>Internal

Fixed queue node.

+
interface FixedQueueNode<T> {
    data: T;
    priority: number;
}

Type Parameters

  • T

    Type of fixed queue node data.

    +

Properties

Properties

data: T
priority: number
diff --git a/docs/interfaces/src.IFixedQueue.html b/docs/interfaces/src.IFixedQueue.html new file mode 100644 index 00000000..00b7af43 --- /dev/null +++ b/docs/interfaces/src.IFixedQueue.html @@ -0,0 +1,34 @@ +IFixedQueue | poolifier - v4.4.4

Interface IFixedQueue<T>Internal

Fixed queue.

+
interface IFixedQueue<T> {
    [iterator]: (() => Iterator<T, any, any>);
    capacity: number;
    clear: (() => void);
    dequeue: (() => undefined | T);
    empty: (() => boolean);
    enqueue: ((data: T, priority?: number) => number);
    full: (() => boolean);
    get: ((index: number) => undefined | T);
    nodeArray: FixedQueueNode<T>[];
    size: number;
}

Type Parameters

  • T

    Type of fixed queue data.

    +

Properties

[iterator]: (() => Iterator<T, any, any>)

Returns an iterator for the fixed queue.

+

Type declaration

    • (): Iterator<T, any, any>
    • Returns Iterator<T, any, any>

      An iterator for the fixed queue.

      +
capacity: number

The fixed queue capacity.

+
clear: (() => void)

Clears the fixed queue.

+
dequeue: (() => undefined | T)

Dequeue data from the fixed queue.

+

Type declaration

    • (): undefined | T
    • Returns undefined | T

      The dequeued data or undefined if the fixed queue is empty.

      +
empty: (() => boolean)

Checks if the fixed queue is empty.

+

Type declaration

    • (): boolean
    • Returns boolean

      true if the fixed queue is empty, false otherwise.

      +
enqueue: ((data: T, priority?: number) => number)

Enqueue data into the fixed queue.

+

Type declaration

    • (data, priority?): number
    • Parameters

      • data: T

        Data to enqueue.

        +
      • Optionalpriority: number

        Priority of the data. Lower values have higher priority.

        +

      Returns number

      The new size of the fixed queue.

      +

If the fixed queue is full.

+
full: (() => boolean)

Checks if the fixed queue is full.

+

Type declaration

    • (): boolean
    • Returns boolean

      true if the fixed queue is full, false otherwise.

      +
get: ((index: number) => undefined | T)

Gets data from the fixed queue.

+

Type declaration

    • (index): undefined | T
    • Parameters

      • index: number

        The index of the data to get.

        +

      Returns undefined | T

      The data at the index or undefined if the fixed queue is empty or the index is out of bounds.

      +
nodeArray: FixedQueueNode<T>[]

The fixed queue node array.

+
size: number

The fixed queue size.

+
diff --git a/docs/interfaces/src.IPool.html b/docs/interfaces/src.IPool.html new file mode 100644 index 00000000..139a45f0 --- /dev/null +++ b/docs/interfaces/src.IPool.html @@ -0,0 +1,80 @@ +IPool | poolifier - v4.4.4

Interface IPool<Worker, Data, Response>

Contract definition for a poolifier pool.

+
interface IPool<Worker, Data, Response> {
    addTaskFunction: ((name: string, fn: TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>) => Promise<boolean>);
    destroy: (() => Promise<void>);
    emitter?: EventEmitterAsyncResource;
    enableTasksQueue: ((enable: boolean, tasksQueueOptions?: TasksQueueOptions) => void);
    execute: ((data?: Data, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response>);
    hasTaskFunction: ((name: string) => boolean);
    info: PoolInfo;
    listTaskFunctionsProperties: (() => TaskFunctionProperties[]);
    mapExecute: ((data: Iterable<Data, any, any>, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response[]>);
    removeTaskFunction: ((name: string) => Promise<boolean>);
    setDefaultTaskFunction: ((name: string) => Promise<boolean>);
    setTasksQueueOptions: ((tasksQueueOptions: TasksQueueOptions) => void);
    setWorkerChoiceStrategy: ((workerChoiceStrategy:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN", workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions) => void);
    setWorkerChoiceStrategyOptions: ((workerChoiceStrategyOptions: WorkerChoiceStrategyOptions) => boolean);
    start: (() => void);
    workerNodes: IWorkerNode<Worker, Data>[];
}

Type Parameters

  • Worker extends IWorker

    Type of worker which manages this pool.

    +
  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

    +
  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

    +

Implemented by

Properties

addTaskFunction: ((name: string, fn: TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>) => Promise<boolean>)

Adds a task function to this pool. +If a task function with the same name already exists, it will be overwritten.

+

Type declaration

https://nodejs.org/api/errors.html#class-typeerror If the name parameter is not a string or an empty string.

+

https://nodejs.org/api/errors.html#class-typeerror If the fn parameter is not a function or task function object.

+
destroy: (() => Promise<void>)

Terminates all workers in this pool.

+
emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. +The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

+

Events that can currently be listened to:

+
    +
  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • +
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • +
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • +
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • +
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • +
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • +
  • 'destroy': Emitted when the pool is destroyed.
  • +
  • 'error': Emitted when an uncaught error occurs.
  • +
  • 'taskError': Emitted when an error occurs while executing a task.
  • +
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • +
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
  • +
+
enableTasksQueue: ((enable: boolean, tasksQueueOptions?: TasksQueueOptions) => void)

Enables/disables the worker node tasks queue in this pool.

+

Type declaration

    • (enable, tasksQueueOptions?): void
    • Parameters

      • enable: boolean

        Whether to enable or disable the worker node tasks queue.

        +
      • OptionaltasksQueueOptions: TasksQueueOptions

        The worker node tasks queue options.

        +

      Returns void

execute: ((data?: Data, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response>)

Executes the specified function in the worker constructor with the task data input parameter.

+

Type declaration

    • (data?, name?, transferList?): Promise<Response>
    • Parameters

      • Optionaldata: Data

        The optional task input data for the specified task function. This can only be structured-cloneable data.

        +
      • Optionalname: string

        The optional name of the task function to execute. If not specified, the default task function will be executed.

        +
      • OptionaltransferList: readonly TransferListItem[]

        An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

        +

      Returns Promise<Response>

      Promise with a task function response that will be fulfilled when the task is completed.

      +
hasTaskFunction: ((name: string) => boolean)

Whether the specified task function exists in this pool.

+

Type declaration

    • (name): boolean
    • Parameters

      • name: string

        The name of the task function.

        +

      Returns boolean

      true if the task function exists, false otherwise.

      +
info: PoolInfo

Pool information.

+
listTaskFunctionsProperties: (() => TaskFunctionProperties[])

Lists the properties of task functions available in this pool.

+

Type declaration

mapExecute: ((data: Iterable<Data, any, any>, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response[]>)

Executes the specified function in the worker constructor with the tasks data iterable input parameter.

+

Type declaration

    • (data, name?, transferList?): Promise<Response[]>
    • Parameters

      • data: Iterable<Data, any, any>

        The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

        +
      • Optionalname: string

        The optional name of the task function to execute. If not specified, the default task function will be executed.

        +
      • OptionaltransferList: readonly TransferListItem[]

        An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

        +

      Returns Promise<Response[]>

      Promise with an array of task function responses that will be fulfilled when the tasks are completed.

      +
removeTaskFunction: ((name: string) => Promise<boolean>)

Removes a task function from this pool.

+

Type declaration

    • (name): Promise<boolean>
    • Parameters

      • name: string

        The name of the task function.

        +

      Returns Promise<boolean>

      true if the task function was removed, false otherwise.

      +
setDefaultTaskFunction: ((name: string) => Promise<boolean>)

Sets the default task function in this pool.

+

Type declaration

    • (name): Promise<boolean>
    • Parameters

      • name: string

        The name of the task function.

        +

      Returns Promise<boolean>

      true if the default task function was set, false otherwise.

      +
setTasksQueueOptions: ((tasksQueueOptions: TasksQueueOptions) => void)

Sets the worker node tasks queue options in this pool.

+

Type declaration

    • (tasksQueueOptions): void
    • Parameters

      Returns void

setWorkerChoiceStrategy: ((workerChoiceStrategy:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN", workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions) => void)

Sets the default worker choice strategy in this pool.

+

Type declaration

    • (workerChoiceStrategy, workerChoiceStrategyOptions?): void
    • Parameters

      • workerChoiceStrategy:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN"

        The default worker choice strategy.

        +
      • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

        The worker choice strategy options.

        +

      Returns void

setWorkerChoiceStrategyOptions: ((workerChoiceStrategyOptions: WorkerChoiceStrategyOptions) => boolean)

Sets the worker choice strategy options in this pool.

+

Type declaration

    • (workerChoiceStrategyOptions): boolean
    • Parameters

      Returns boolean

      true if the worker choice strategy options were set, false otherwise.

      +
start: (() => void)

Starts the minimum number of workers in this pool.

+
workerNodes: IWorkerNode<Worker, Data>[]

Pool worker nodes.

+
diff --git a/docs/interfaces/IWorker.html b/docs/interfaces/src.IWorker.html similarity index 66% rename from docs/interfaces/IWorker.html rename to docs/interfaces/src.IWorker.html index 41432fc9..0aebd542 100644 --- a/docs/interfaces/IWorker.html +++ b/docs/interfaces/src.IWorker.html @@ -1,73 +1,73 @@ -IWorker | poolifier - v4.4.4

Interface IWorker

Worker interface.

-
interface IWorker {
    disconnect?: (() => void);
    id?: number;
    kill?: ((signal?: string) => void);
    on: ((event: string, handler: EventHandler<IWorker>) => this);
    once: ((event: string, handler: EventHandler<IWorker>) => this);
    terminate?: (() => Promise<number>);
    threadId?: number;
    unref?: (() => void);
    [captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: AnyRest): void;
    addListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    emit<K>(eventName: string | symbol, ...args: AnyRest): boolean;
    eventNames(): (string | symbol)[];
    getMaxListeners(): number;
    listenerCount<K>(eventName: string | symbol, listener?: Function): number;
    listeners<K>(eventName: string | symbol): Function[];
    off<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    prependListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    prependOnceListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    rawListeners<K>(eventName: string | symbol): Function[];
    removeAllListeners(eventName?: string | symbol): this;
    removeListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    setMaxListeners(n: number): this;
}

Hierarchy

  • EventEmitter
    • IWorker

Properties

Methods

[captureRejectionSymbol]? -addListener -emit -eventNames -getMaxListeners -listenerCount -listeners -off -prependListener -prependOnceListener -rawListeners -removeAllListeners -removeListener -setMaxListeners +IWorker | poolifier - v4.4.4

Interface IWorker

Worker interface.

+
interface IWorker {
    disconnect?: (() => void);
    id?: number;
    kill?: ((signal?: string) => void);
    on: ((event: string, handler: EventHandler<IWorker>) => this);
    once: ((event: string, handler: EventHandler<IWorker>) => this);
    terminate?: (() => Promise<number>);
    threadId?: number;
    unref?: (() => void);
    [captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: AnyRest): void;
    addListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    emit<K>(eventName: string | symbol, ...args: AnyRest): boolean;
    eventNames(): (string | symbol)[];
    getMaxListeners(): number;
    listenerCount<K>(eventName: string | symbol, listener?: Function): number;
    listeners<K>(eventName: string | symbol): Function[];
    off<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    prependListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    prependOnceListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    rawListeners<K>(eventName: string | symbol): Function[];
    removeAllListeners(eventName?: string | symbol): this;
    removeListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
    setMaxListeners(n: number): this;
}

Hierarchy

  • EventEmitter
    • IWorker

Properties

disconnect?: (() => void)

Cluster worker disconnect.

-
id?: number

Cluster worker id.

-
kill?: ((signal?: string) => void)

Cluster worker kill.

-
on: ((event: string, handler: EventHandler<IWorker>) => this)

Registers an event handler.

+
id?: number

Cluster worker id.

+
kill?: ((signal?: string) => void)

Cluster worker kill.

+
on: ((event: string, handler: EventHandler<IWorker>) => this)

Registers an event handler.

Type declaration

    • (event, handler): this
    • Parameters

      Returns this

once: ((event: string, handler: EventHandler<IWorker>) => this)

Registers once an event handler.

+
  • handler: EventHandler<IWorker>

    The event handler.

    +
  • Returns this

    once: ((event: string, handler: EventHandler<IWorker>) => this)

    Registers once an event handler.

    Type declaration

      • (event, handler): this
      • Parameters

        Returns this

    terminate?: (() => Promise<number>)

    Stop all JavaScript execution in the worker thread as soon as possible. +

  • handler: EventHandler<IWorker>

    The event handler.

    +
  • Returns this

    terminate?: (() => Promise<number>)

    Stop all JavaScript execution in the worker thread as soon as possible. Returns a Promise for the exit code that is fulfilled when the 'exit' event is emitted.

    -
    threadId?: number

    Worker thread worker id.

    -
    unref?: (() => void)

    Calling unref() on a worker allows the thread to exit if this is the only +

    threadId?: number

    Worker thread worker id.

    +
    unref?: (() => void)

    Calling unref() on a worker allows the thread to exit if this is the only active handle in the event system. If the worker is already unref()ed callingunref() again has no effect.

    v10.5.0

    -

    Methods

    • Type Parameters

      • K

      Parameters

      • error: Error
      • event: string | symbol
      • Rest...args: AnyRest

      Returns void

    • Alias for emitter.on(eventName, listener).

      +

    Methods

    • Type Parameters

      • K

      Parameters

      • error: Error
      • event: string | symbol
      • Rest...args: AnyRest

      Returns void

    • Alias for emitter.on(eventName, listener).

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      -
    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments +

    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments to each.

      Returns true if the event had listeners, false otherwise.

      import { EventEmitter } from 'node:events';
      const myEmitter = new EventEmitter();

      // First listener
      myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
      });
      // Second listener
      myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
      });
      // Third listener
      myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
      });

      console.log(myEmitter.listeners('event'));

      myEmitter.emit('event', 1, 2, 3, 4, 5);

      // Prints:
      // [
      // [Function: firstListener],
      // [Function: secondListener],
      // [Function: thirdListener]
      // ]
      // Helloooo! first listener
      // event with parameters 1, 2 in second listener
      // event with parameters 1, 2, 3, 4, 5 in third listener

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • Rest...args: AnyRest

      Returns boolean

      v0.1.26

      -
    • Returns an array listing the events for which the emitter has registered +

    • Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or Symbols.

      import { EventEmitter } from 'node:events';

      const myEE = new EventEmitter();
      myEE.on('foo', () => {});
      myEE.on('bar', () => {});

      const sym = Symbol('symbol');
      myEE.on(sym, () => {});

      console.log(myEE.eventNames());
      // Prints: [ 'foo', 'bar', Symbol(symbol) ]

      Returns (string | symbol)[]

      v6.0.0

      -
    • Returns the current max listener value for the EventEmitter which is either +

    • Returns the current max listener value for the EventEmitter which is either set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

      Returns number

      v1.0.0

      -
    • Returns the number of listeners listening for the event named eventName. +

    • Returns the number of listeners listening for the event named eventName. If listener is provided, it will return how many times the listener is found in the list of the listeners of the event.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event being listened for

      • Optionallistener: Function

        The event handler function

      Returns number

      v3.2.0

      -
    • Returns a copy of the array of listeners for the event named eventName.

      +
    • Returns a copy of the array of listeners for the event named eventName.

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ]

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v0.1.26

      -
    • Alias for emitter.removeListener().

      +
    • Alias for emitter.removeListener().

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v10.0.0

      -
    • Adds the listener function to the beginning of the listeners array for the +

    • Adds the listener function to the beginning of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

      @@ -78,7 +78,7 @@ and listener will result in the listener being added,

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: ((...args: any[]) => void)

        The callback function

          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      -
    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this +

    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this listener is removed, and then invoked.

      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });
      @@ -87,19 +87,19 @@ listener is removed, and then invoked.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: ((...args: any[]) => void)

        The callback function

          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      -
    • Returns a copy of the array of listeners for the event named eventName, +

    • Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log');

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v9.4.0

      -
    • Removes all listeners, or those of the specified eventName.

      +
    • Removes all listeners, or those of the specified eventName.

      It is bad practice to remove listeners added elsewhere in the code, particularly when the EventEmitter instance was created by some other component or module (e.g. sockets or file streams).

      Returns a reference to the EventEmitter, so that calls can be chained.

      Parameters

      • OptionaleventName: string | symbol

      Returns this

      v0.1.26

      -
    • Removes the specified listener from the listener array for the event named eventName.

      +
    • Removes the specified listener from the listener array for the event named eventName.

      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback);
      @@ -126,10 +126,10 @@ recently added instance. In the example the once('ping') listener i

      Returns a reference to the EventEmitter, so that calls can be chained.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      -
    • By default EventEmitters will print a warning if more than 10 listeners are +

    • By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks. The emitter.setMaxListeners() method allows the limit to be modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

      Returns a reference to the EventEmitter, so that calls can be chained.

      Parameters

      • n: number

      Returns this

      v0.3.5

      -
    +
    diff --git a/docs/interfaces/src.IWorkerChoiceStrategy.html b/docs/interfaces/src.IWorkerChoiceStrategy.html new file mode 100644 index 00000000..bcd43359 --- /dev/null +++ b/docs/interfaces/src.IWorkerChoiceStrategy.html @@ -0,0 +1,25 @@ +IWorkerChoiceStrategy | poolifier - v4.4.4

    Interface IWorkerChoiceStrategyInternal

    Worker choice strategy interface.

    +
    interface IWorkerChoiceStrategy {
        choose: (() => undefined | number);
        remove: ((workerNodeKey: number) => boolean);
        reset: (() => boolean);
        setOptions: ((opts: undefined | WorkerChoiceStrategyOptions) => void);
        strategyPolicy: StrategyPolicy;
        taskStatisticsRequirements: TaskStatisticsRequirements;
        update: ((workerNodeKey: number) => boolean);
    }

    Properties

    choose: (() => undefined | number)

    Chooses a worker node in the pool and returns its key. +If no worker nodes are not eligible, undefined is returned. +If undefined is returned, the caller retry.

    +

    Type declaration

      • (): undefined | number
      • Returns undefined | number

        The worker node key or undefined.

        +
    remove: ((workerNodeKey: number) => boolean)

    Removes the worker node key from strategy internals.

    +

    Type declaration

      • (workerNodeKey): boolean
      • Parameters

        • workerNodeKey: number

          The worker node key.

          +

        Returns boolean

        true if the worker node key is removed, false otherwise.

        +
    reset: (() => boolean)

    Resets strategy internals.

    +

    Type declaration

      • (): boolean
      • Returns boolean

        true if the reset is successful, false otherwise.

        +
    setOptions: ((opts: undefined | WorkerChoiceStrategyOptions) => void)

    Sets the worker choice strategy options.

    +

    Type declaration

    strategyPolicy: StrategyPolicy

    Strategy policy.

    +
    taskStatisticsRequirements: TaskStatisticsRequirements

    Tasks statistics requirements.

    +
    update: ((workerNodeKey: number) => boolean)

    Updates the worker node key strategy internals. +This is called after a task has been executed on a worker node.

    +

    Type declaration

      • (workerNodeKey): boolean
      • Parameters

        • workerNodeKey: number

        Returns boolean

        true if the update is successful, false otherwise.

        +
    diff --git a/docs/interfaces/IWorkerNode.html b/docs/interfaces/src.IWorkerNode.html similarity index 61% rename from docs/interfaces/IWorkerNode.html rename to docs/interfaces/src.IWorkerNode.html index 80dfe187..80c9374b 100644 --- a/docs/interfaces/IWorkerNode.html +++ b/docs/interfaces/src.IWorkerNode.html @@ -1,108 +1,108 @@ -IWorkerNode | poolifier - v4.4.4

    Interface IWorkerNode<Worker, Data>Internal

    Worker node interface.

    -
    interface IWorkerNode<Worker, Data> {
        clearTasksQueue: (() => void);
        deleteTaskFunctionWorkerUsage: ((name: string) => boolean);
        dequeueLastPrioritizedTask: (() => undefined | Task<Data>);
        dequeueTask: ((bucket?: number) => undefined | Task<Data>);
        enqueueTask: ((task: Task<Data>) => number);
        getTaskFunctionWorkerUsage: ((name: string) => undefined | WorkerUsage);
        info: WorkerInfo;
        messageChannel?: MessageChannel;
        registerOnceWorkerEventHandler: ((event: string, handler: EventHandler<Worker>) => void);
        registerWorkerEventHandler: ((event: string, handler: EventHandler<Worker>) => void);
        setTasksQueuePriority: ((enablePriority: boolean) => void);
        strategyData?: StrategyData;
        tasksQueueBackPressureSize: number;
        tasksQueueSize: (() => number);
        terminate: (() => Promise<void>);
        usage: WorkerUsage;
        worker: Worker;
        [captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: AnyRest): void;
        addListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        emit<K>(eventName: string | symbol, ...args: AnyRest): boolean;
        eventNames(): (string | symbol)[];
        getMaxListeners(): number;
        listenerCount<K>(eventName: string | symbol, listener?: Function): number;
        listeners<K>(eventName: string | symbol): Function[];
        off<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        on<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        once<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        prependListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        prependOnceListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        rawListeners<K>(eventName: string | symbol): Function[];
        removeAllListeners(eventName?: string | symbol): this;
        removeListener<K>(eventName: string | symbol, listener: ((...args: any[]) => void)): this;
        setMaxListeners(n: number): this;
    }

    Type Parameters

    Hierarchy

    • EventEmitter
      • IWorkerNode

    Properties

    clearTasksQueue: (() => void)

    Clears tasks queue.

    -
    deleteTaskFunctionWorkerUsage: ((name: string) => boolean)

    Deletes task function worker usage statistics.

    +
    deleteTaskFunctionWorkerUsage: ((name: string) => boolean)

    Deletes task function worker usage statistics.

    Type declaration

      • (name): boolean
      • Parameters

        • name: string

          The task function name.

        Returns boolean

        true if the task function worker usage statistics were deleted, false otherwise.

        -
    dequeueLastPrioritizedTask: (() => undefined | Task<Data>)

    Dequeue last prioritized task.

    -

    Type declaration

    dequeueTask: ((bucket?: number) => undefined | Task<Data>)

    Dequeue task.

    -

    Type declaration

      • (bucket?): undefined | Task<Data>
      • Parameters

        • Optionalbucket: number

          The prioritized bucket to dequeue from.

          -

        Returns undefined | Task<Data>

        The dequeued task.

        +
    dequeueLastPrioritizedTask: (() => undefined | Task<Data>)

    Dequeue last prioritized task.

    +

    Type declaration

    dequeueTask: ((bucket?: number) => undefined | Task<Data>)

    Dequeue task.

    +

    Type declaration

      • (bucket?): undefined | Task<Data>
      • Parameters

        • Optionalbucket: number

          The prioritized bucket to dequeue from.

          +

        Returns undefined | Task<Data>

        The dequeued task.

    0
     
    -
    enqueueTask: ((task: Task<Data>) => number)

    Enqueue task.

    -

    Type declaration

    enqueueTask: ((task: Task<Data>) => number)

    Enqueue task.

    +

    Type declaration

      • (task): number
      • Parameters

        Returns number

        The tasks queue size.

        -
    getTaskFunctionWorkerUsage: ((name: string) => undefined | WorkerUsage)

    Gets task function worker usage statistics.

    -

    Type declaration

      • (name): undefined | WorkerUsage
      • Parameters

        • name: string

          The task function name.

          -

        Returns undefined | WorkerUsage

        The task function worker usage statistics if the task function worker usage statistics are initialized, undefined otherwise.

        -

    Worker info.

    -
    messageChannel?: MessageChannel

    Message channel (worker thread only).

    -
    registerOnceWorkerEventHandler: ((event: string, handler: EventHandler<Worker>) => void)

    Registers once a worker event handler.

    +
    getTaskFunctionWorkerUsage: ((name: string) => undefined | WorkerUsage)

    Gets task function worker usage statistics.

    +

    Type declaration

      • (name): undefined | WorkerUsage
      • Parameters

        • name: string

          The task function name.

          +

        Returns undefined | WorkerUsage

        The task function worker usage statistics if the task function worker usage statistics are initialized, undefined otherwise.

        +

    Worker info.

    +
    messageChannel?: MessageChannel

    Message channel (worker thread only).

    +
    registerOnceWorkerEventHandler: ((event: string, handler: EventHandler<Worker>) => void)

    Registers once a worker event handler.

    Type declaration

      • (event, handler): void
      • Parameters

        Returns void

    registerWorkerEventHandler: ((event: string, handler: EventHandler<Worker>) => void)

    Registers a worker event handler.

    +
  • handler: EventHandler<Worker>

    The event handler.

    +
  • Returns void

    registerWorkerEventHandler: ((event: string, handler: EventHandler<Worker>) => void)

    Registers a worker event handler.

    Type declaration

      • (event, handler): void
      • Parameters

        Returns void

    setTasksQueuePriority: ((enablePriority: boolean) => void)

    Sets tasks queue priority.

    +
  • handler: EventHandler<Worker>

    The event handler.

    +
  • Returns void

    setTasksQueuePriority: ((enablePriority: boolean) => void)

    Sets tasks queue priority.

    Type declaration

      • (enablePriority): void
      • Parameters

        • enablePriority: boolean

          Whether to enable tasks queue priority.

          -

        Returns void

    strategyData?: StrategyData

    Worker choice strategy data. +

    Returns void

    strategyData?: StrategyData

    Worker choice strategy data. This is used to store data that are specific to the worker choice strategy.

    -
    tasksQueueBackPressureSize: number

    Tasks queue back pressure size. +

    tasksQueueBackPressureSize: number

    Tasks queue back pressure size. This is the number of tasks that can be enqueued before the worker node has back pressure.

    -
    tasksQueueSize: (() => number)

    Tasks queue size.

    +
    tasksQueueSize: (() => number)

    Tasks queue size.

    Type declaration

      • (): number
      • Returns number

        The tasks queue size.

        -
    terminate: (() => Promise<void>)

    Terminates the worker node.

    -

    Worker usage statistics.

    -
    worker: Worker

    Worker.

    -

    Methods

    • Type Parameters

      • K

      Parameters

      • error: Error
      • event: string | symbol
      • Rest...args: AnyRest

      Returns void

    • Alias for emitter.on(eventName, listener).

      +
    terminate: (() => Promise<void>)

    Terminates the worker node.

    +

    Worker usage statistics.

    +
    worker: Worker

    Worker.

    +

    Methods

    • Type Parameters

      • K

      Parameters

      • error: Error
      • event: string | symbol
      • Rest...args: AnyRest

      Returns void

    • Alias for emitter.on(eventName, listener).

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      -
    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments +

    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments to each.

      Returns true if the event had listeners, false otherwise.

      import { EventEmitter } from 'node:events';
      const myEmitter = new EventEmitter();

      // First listener
      myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
      });
      // Second listener
      myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
      });
      // Third listener
      myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
      });

      console.log(myEmitter.listeners('event'));

      myEmitter.emit('event', 1, 2, 3, 4, 5);

      // Prints:
      // [
      // [Function: firstListener],
      // [Function: secondListener],
      // [Function: thirdListener]
      // ]
      // Helloooo! first listener
      // event with parameters 1, 2 in second listener
      // event with parameters 1, 2, 3, 4, 5 in third listener

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • Rest...args: AnyRest

      Returns boolean

      v0.1.26

      -
    • Returns an array listing the events for which the emitter has registered +

    • Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or Symbols.

      import { EventEmitter } from 'node:events';

      const myEE = new EventEmitter();
      myEE.on('foo', () => {});
      myEE.on('bar', () => {});

      const sym = Symbol('symbol');
      myEE.on(sym, () => {});

      console.log(myEE.eventNames());
      // Prints: [ 'foo', 'bar', Symbol(symbol) ]

      Returns (string | symbol)[]

      v6.0.0

      -
    • Returns the current max listener value for the EventEmitter which is either +

    • Returns the current max listener value for the EventEmitter which is either set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

      Returns number

      v1.0.0

      -
    • Returns the number of listeners listening for the event named eventName. +

    • Returns the number of listeners listening for the event named eventName. If listener is provided, it will return how many times the listener is found in the list of the listeners of the event.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event being listened for

      • Optionallistener: Function

        The event handler function

      Returns number

      v3.2.0

      -
    • Returns a copy of the array of listeners for the event named eventName.

      +
    • Returns a copy of the array of listeners for the event named eventName.

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ]

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v0.1.26

      -
    • Alias for emitter.removeListener().

      +
    • Alias for emitter.removeListener().

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v10.0.0

      -
    • Adds the listener function to the end of the listeners array for the event +

    • Adds the listener function to the end of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

      @@ -118,7 +118,7 @@ event listener to the beginning of the listeners array.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: ((...args: any[]) => void)

        The callback function

          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.101

      -
    • Adds a one-time listener function for the event named eventName. The +

    • Adds a one-time listener function for the event named eventName. The next time eventName is triggered, this listener is removed and then invoked.

      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });
      @@ -132,7 +132,7 @@ event listener to the beginning of the listeners array.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: ((...args: any[]) => void)

        The callback function

          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.3.0

      -
    • Adds the listener function to the beginning of the listeners array for the +

    • Adds the listener function to the beginning of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

      @@ -143,7 +143,7 @@ and listener will result in the listener being added,

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: ((...args: any[]) => void)

        The callback function

          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      -
    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this +

    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this listener is removed, and then invoked.

      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });
      @@ -152,19 +152,19 @@ listener is removed, and then invoked.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: ((...args: any[]) => void)

        The callback function

          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v6.0.0

      -
    • Returns a copy of the array of listeners for the event named eventName, +

    • Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log');

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v9.4.0

      -
    • Removes all listeners, or those of the specified eventName.

      +
    • Removes all listeners, or those of the specified eventName.

      It is bad practice to remove listeners added elsewhere in the code, particularly when the EventEmitter instance was created by some other component or module (e.g. sockets or file streams).

      Returns a reference to the EventEmitter, so that calls can be chained.

      Parameters

      • OptionaleventName: string | symbol

      Returns this

      v0.1.26

      -
    • Removes the specified listener from the listener array for the event named eventName.

      +
    • Removes the specified listener from the listener array for the event named eventName.

      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback);
      @@ -191,10 +191,10 @@ recently added instance. In the example the once('ping') listener i

      Returns a reference to the EventEmitter, so that calls can be chained.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: ((...args: any[]) => void)
          • (...args): void
          • Parameters

            • Rest...args: any[]

            Returns void

      Returns this

      v0.1.26

      -
    • By default EventEmitters will print a warning if more than 10 listeners are +

    • By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks. The emitter.setMaxListeners() method allows the limit to be modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

      Returns a reference to the EventEmitter, so that calls can be chained.

      Parameters

      • n: number

      Returns this

      v0.3.5

      -
    +
    diff --git a/docs/interfaces/src.MeasurementOptions.html b/docs/interfaces/src.MeasurementOptions.html new file mode 100644 index 00000000..2cb9155e --- /dev/null +++ b/docs/interfaces/src.MeasurementOptions.html @@ -0,0 +1,4 @@ +MeasurementOptions | poolifier - v4.4.4

    Interface MeasurementOptions

    Measurement options.

    +
    interface MeasurementOptions {
        median: boolean;
    }

    Properties

    Properties

    median: boolean

    Set measurement median.

    +
    diff --git a/docs/interfaces/src.MeasurementStatistics.html b/docs/interfaces/src.MeasurementStatistics.html new file mode 100644 index 00000000..6498c151 --- /dev/null +++ b/docs/interfaces/src.MeasurementStatistics.html @@ -0,0 +1,14 @@ +MeasurementStatistics | poolifier - v4.4.4

    Interface MeasurementStatisticsInternal

    Measurement statistics.

    +
    interface MeasurementStatistics {
        aggregate?: number;
        average?: number;
        history: CircularBuffer;
        maximum?: number;
        median?: number;
        minimum?: number;
    }

    Properties

    aggregate?: number

    Measurement aggregate.

    +
    average?: number

    Measurement average.

    +

    Measurement history.

    +
    maximum?: number

    Measurement maximum.

    +
    median?: number

    Measurement median.

    +
    minimum?: number

    Measurement minimum.

    +
    diff --git a/docs/interfaces/src.MeasurementStatisticsRequirements.html b/docs/interfaces/src.MeasurementStatisticsRequirements.html new file mode 100644 index 00000000..025e1abc --- /dev/null +++ b/docs/interfaces/src.MeasurementStatisticsRequirements.html @@ -0,0 +1,8 @@ +MeasurementStatisticsRequirements | poolifier - v4.4.4

    Interface MeasurementStatisticsRequirementsInternal

    Measurement statistics requirements.

    +
    interface MeasurementStatisticsRequirements {
        aggregate: boolean;
        average: boolean;
        median: boolean;
    }

    Properties

    Properties

    aggregate: boolean

    Requires measurement aggregate.

    +
    average: boolean

    Requires measurement average.

    +
    median: boolean

    Requires measurement median.

    +
    diff --git a/docs/interfaces/src.MessageValue.html b/docs/interfaces/src.MessageValue.html new file mode 100644 index 00000000..3036cb43 --- /dev/null +++ b/docs/interfaces/src.MessageValue.html @@ -0,0 +1,52 @@ +MessageValue | poolifier - v4.4.4

    Interface MessageValue<Data, ErrorData>Internal

    Message object that is passed between main worker and worker.

    +
    interface MessageValue<Data, ErrorData> {
        checkActive?: boolean;
        data?: Data;
        kill?:
            | true
            | "success"
            | "HARD"
            | "SOFT"
            | "failure";
        name?: string;
        port?: MessagePort;
        priority?: number;
        ready?: boolean;
        statistics?: WorkerStatistics;
        strategy?:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN";
        taskFunction?: string;
        taskFunctionOperation?: "add" | "default" | "remove";
        taskFunctionOperationStatus?: boolean;
        taskFunctionProperties?: TaskFunctionProperties;
        taskFunctionsProperties?: TaskFunctionProperties[];
        taskId?: `${string}-${string}-${string}-${string}-${string}`;
        taskPerformance?: TaskPerformance;
        timestamp?: number;
        transferList?: readonly TransferListItem[];
        workerError?: WorkerError<ErrorData>;
        workerId?: number;
    }

    Type Parameters

    • Data = unknown

      Type of data sent to the worker or execution response. This can only be structured-cloneable data.

      +
    • ErrorData = unknown

      Type of data sent to the worker triggering an error. This can only be structured-cloneable data.

      +

    Hierarchy (view full)

    Properties

    checkActive?: boolean

    Whether the worker starts or stops its activity check.

    +
    data?: Data

    Task input data that will be passed to the worker.

    +
    kill?:
        | true
        | "success"
        | "HARD"
        | "SOFT"
        | "failure"

    Kill code.

    +
    name?: string

    Task name.

    +
    port?: MessagePort

    Message port.

    +
    priority?: number

    Task priority. Lower values have higher priority.

    +
    0
    +
    + +
    ready?: boolean

    Whether the worker is ready or not.

    +
    statistics?: WorkerStatistics

    Whether the worker computes the given statistics or not.

    +
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN"

    Task worker choice strategy.

    +
    taskFunction?: string

    Task function serialized to string.

    +
    taskFunctionOperation?: "add" | "default" | "remove"

    Task function operation:

    +
      +
    • 'add' - Add a task function.
    • +
    • 'remove' - Remove a task function.
    • +
    • 'default' - Set a task function as default.
    • +
    +
    taskFunctionOperationStatus?: boolean

    Whether the task function operation is successful or not.

    +
    taskFunctionProperties?: TaskFunctionProperties

    Task function properties.

    +
    taskFunctionsProperties?: TaskFunctionProperties[]

    Task functions properties.

    +
    taskId?: `${string}-${string}-${string}-${string}-${string}`

    Task UUID.

    +
    taskPerformance?: TaskPerformance

    Task performance.

    +
    timestamp?: number

    Timestamp.

    +
    transferList?: readonly TransferListItem[]

    Array of transferable objects.

    +
    workerError?: WorkerError<ErrorData>

    Worker error.

    +
    workerId?: number

    Worker id.

    +
    diff --git a/docs/interfaces/src.PoolInfo.html b/docs/interfaces/src.PoolInfo.html new file mode 100644 index 00000000..bae3fd26 --- /dev/null +++ b/docs/interfaces/src.PoolInfo.html @@ -0,0 +1,35 @@ +PoolInfo | poolifier - v4.4.4

    Interface PoolInfo

    Pool information.

    +
    interface PoolInfo {
        backPressure?: boolean;
        backPressureWorkerNodes?: number;
        busyWorkerNodes: number;
        defaultStrategy:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN";
        dynamicWorkerNodes?: number;
        elu?: {
            active: {
                average?: number;
                maximum: number;
                median?: number;
                minimum: number;
            };
            idle: {
                average?: number;
                maximum: number;
                median?: number;
                minimum: number;
            };
            utilization: {
                average?: number;
                median?: number;
            };
        };
        executedTasks: number;
        executingTasks: number;
        failedTasks: number;
        idleWorkerNodes: number;
        maxQueuedTasks?: number;
        maxSize: number;
        minSize: number;
        queuedTasks?: number;
        ready: boolean;
        runTime?: {
            average?: number;
            maximum: number;
            median?: number;
            minimum: number;
        };
        started: boolean;
        stealingWorkerNodes?: number;
        stolenTasks?: number;
        strategyRetries: number;
        type: "fixed" | "dynamic";
        utilization?: number;
        version: string;
        waitTime?: {
            average?: number;
            maximum: number;
            median?: number;
            minimum: number;
        };
        worker: "cluster" | "thread";
        workerNodes: number;
    }

    Properties

    backPressure?: boolean
    backPressureWorkerNodes?: number

    Pool tasks back pressure worker nodes.

    +
    busyWorkerNodes: number

    Pool busy worker nodes.

    +
    defaultStrategy:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN"
    dynamicWorkerNodes?: number

    Pool dynamic worker nodes.

    +
    elu?: {
        active: {
            average?: number;
            maximum: number;
            median?: number;
            minimum: number;
        };
        idle: {
            average?: number;
            maximum: number;
            median?: number;
            minimum: number;
        };
        utilization: {
            average?: number;
            median?: number;
        };
    }
    executedTasks: number
    executingTasks: number
    failedTasks: number
    idleWorkerNodes: number

    Pool idle worker nodes.

    +
    maxQueuedTasks?: number
    maxSize: number
    minSize: number
    queuedTasks?: number
    ready: boolean
    runTime?: {
        average?: number;
        maximum: number;
        median?: number;
        minimum: number;
    }
    started: boolean
    stealingWorkerNodes?: number

    Pool tasks stealing worker nodes.

    +
    stolenTasks?: number
    strategyRetries: number
    type: "fixed" | "dynamic"
    utilization?: number

    Pool utilization.

    +
    version: string
    waitTime?: {
        average?: number;
        maximum: number;
        median?: number;
        minimum: number;
    }
    worker: "cluster" | "thread"
    workerNodes: number

    Pool total worker nodes.

    +
    diff --git a/docs/interfaces/src.PoolOptions.html b/docs/interfaces/src.PoolOptions.html new file mode 100644 index 00000000..11b2a390 --- /dev/null +++ b/docs/interfaces/src.PoolOptions.html @@ -0,0 +1,50 @@ +PoolOptions | poolifier - v4.4.4

    Interface PoolOptions<Worker>

    Options for a poolifier pool.

    +
    interface PoolOptions<Worker> {
        enableEvents?: boolean;
        enableTasksQueue?: boolean;
        env?: Record<string, unknown>;
        errorHandler?: ErrorHandler<Worker>;
        exitHandler?: ExitHandler<Worker>;
        messageHandler?: MessageHandler<Worker>;
        onlineHandler?: OnlineHandler<Worker>;
        restartWorkerOnError?: boolean;
        settings?: ClusterSettings;
        startWorkers?: boolean;
        tasksQueueOptions?: TasksQueueOptions;
        workerChoiceStrategy?:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN";
        workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions;
        workerOptions?: WorkerOptions;
    }

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      +

    Properties

    enableEvents?: boolean

    Pool events integrated with async resource emission.

    +
    true
    +
    + +
    enableTasksQueue?: boolean

    Pool worker node tasks queue.

    +
    false
    +
    + +
    env?: Record<string, unknown>

    Key/value pairs to add to worker process environment.

    +
    errorHandler?: ErrorHandler<Worker>

    A function that will listen for error event on each worker.

    +

    () => {}

    +
    exitHandler?: ExitHandler<Worker>

    A function that will listen for exit event on each worker.

    +

    () => {}

    +
    messageHandler?: MessageHandler<Worker>

    A function that will listen for message event on each worker.

    +

    () => {}

    +
    onlineHandler?: OnlineHandler<Worker>

    A function that will listen for online event on each worker.

    +

    () => {}

    +
    restartWorkerOnError?: boolean

    Restart worker on error.

    +
    settings?: ClusterSettings

    Cluster settings.

    +
    startWorkers?: boolean

    Whether to start the minimum number of workers at pool initialization.

    +
    true
    +
    + +
    tasksQueueOptions?: TasksQueueOptions

    Pool worker node tasks queue options.

    +
    workerChoiceStrategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN"

    The default worker choice strategy to use in this pool.

    +
    WorkerChoiceStrategies.ROUND_ROBIN
    +
    + +
    workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions

    The worker choice strategy options.

    +
    workerOptions?: WorkerOptions

    Worker options.

    +
    diff --git a/docs/interfaces/src.PromiseResponseWrapper.html b/docs/interfaces/src.PromiseResponseWrapper.html new file mode 100644 index 00000000..5ab908f1 --- /dev/null +++ b/docs/interfaces/src.PromiseResponseWrapper.html @@ -0,0 +1,11 @@ +PromiseResponseWrapper | poolifier - v4.4.4

    Interface PromiseResponseWrapper<Response>Internal

    An object holding the task execution response promise resolve/reject callbacks.

    +
    interface PromiseResponseWrapper<Response> {
        asyncResource?: AsyncResource;
        reject: ((reason?: unknown) => void);
        resolve: ((value: Response | PromiseLike<Response>) => void);
        workerNodeKey: number;
    }

    Type Parameters

    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      +

    Properties

    asyncResource?: AsyncResource

    The asynchronous resource used to track the task execution.

    +
    reject: ((reason?: unknown) => void)

    Reject callback to reject the promise.

    +
    resolve: ((value: Response | PromiseLike<Response>) => void)

    Resolve callback to fulfill the promise.

    +
    workerNodeKey: number

    The worker node key executing the task.

    +
    diff --git a/docs/interfaces/src.StrategyData.html b/docs/interfaces/src.StrategyData.html new file mode 100644 index 00000000..423f06a5 --- /dev/null +++ b/docs/interfaces/src.StrategyData.html @@ -0,0 +1,3 @@ +StrategyData | poolifier - v4.4.4

    Interface StrategyDataInternal

    Worker choice strategy data.

    +
    interface StrategyData {
        virtualTaskEndTimestamp?: number;
    }

    Properties

    virtualTaskEndTimestamp?: number
    diff --git a/docs/interfaces/src.StrategyPolicy.html b/docs/interfaces/src.StrategyPolicy.html new file mode 100644 index 00000000..81cf4168 --- /dev/null +++ b/docs/interfaces/src.StrategyPolicy.html @@ -0,0 +1,6 @@ +StrategyPolicy | poolifier - v4.4.4

    Interface StrategyPolicyInternal

    Strategy policy.

    +
    interface StrategyPolicy {
        dynamicWorkerReady: boolean;
        dynamicWorkerUsage: boolean;
    }

    Properties

    dynamicWorkerReady: boolean

    Expects the newly created dynamic worker to be flagged as ready.

    +
    dynamicWorkerUsage: boolean

    Expects tasks execution on the newly created dynamic worker.

    +
    diff --git a/docs/interfaces/src.Task.html b/docs/interfaces/src.Task.html new file mode 100644 index 00000000..e45e1343 --- /dev/null +++ b/docs/interfaces/src.Task.html @@ -0,0 +1,20 @@ +Task | poolifier - v4.4.4

    Interface Task<Data>Internal

    Message object that is passed as a task between main worker and worker.

    +
    interface Task<Data> {
        data?: Data;
        name?: string;
        priority?: number;
        strategy?:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN";
        taskId?: `${string}-${string}-${string}-${string}-${string}`;
        timestamp?: number;
        transferList?: readonly TransferListItem[];
    }

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      +

    Hierarchy (view full)

    Properties

    data?: Data

    Task input data that will be passed to the worker.

    +
    name?: string

    Task name.

    +
    priority?: number

    Task priority. Lower values have higher priority.

    +
    0
    +
    + +
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN"

    Task worker choice strategy.

    +
    taskId?: `${string}-${string}-${string}-${string}-${string}`

    Task UUID.

    +
    timestamp?: number

    Timestamp.

    +
    transferList?: readonly TransferListItem[]

    Array of transferable objects.

    +
    diff --git a/docs/interfaces/src.TaskFunctionObject.html b/docs/interfaces/src.TaskFunctionObject.html new file mode 100644 index 00000000..c38e3bb8 --- /dev/null +++ b/docs/interfaces/src.TaskFunctionObject.html @@ -0,0 +1,10 @@ +TaskFunctionObject | poolifier - v4.4.4

    Interface TaskFunctionObject<Data, Response>

    Task function object.

    +
    interface TaskFunctionObject<Data, Response> {
        priority?: number;
        strategy?:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN";
        taskFunction: TaskFunction<Data, Response>;
    }

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      +
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      +

    Properties

    priority?: number

    Task function priority. Lower values have higher priority.

    +
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN"

    Task function worker choice strategy.

    +
    taskFunction: TaskFunction<Data, Response>

    Task function.

    +
    diff --git a/docs/interfaces/src.TaskFunctionOperationResult.html b/docs/interfaces/src.TaskFunctionOperationResult.html new file mode 100644 index 00000000..3ce38aee --- /dev/null +++ b/docs/interfaces/src.TaskFunctionOperationResult.html @@ -0,0 +1,4 @@ +TaskFunctionOperationResult | poolifier - v4.4.4

    Interface TaskFunctionOperationResult

    Task function operation result.

    +
    interface TaskFunctionOperationResult {
        error?: Error;
        status: boolean;
    }

    Properties

    Properties

    error?: Error
    status: boolean
    diff --git a/docs/interfaces/src.TaskFunctionProperties.html b/docs/interfaces/src.TaskFunctionProperties.html new file mode 100644 index 00000000..7425fc96 --- /dev/null +++ b/docs/interfaces/src.TaskFunctionProperties.html @@ -0,0 +1,8 @@ +TaskFunctionProperties | poolifier - v4.4.4

    Interface TaskFunctionProperties

    Task function properties.

    +
    interface TaskFunctionProperties {
        name: string;
        priority?: number;
        strategy?:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN";
    }

    Properties

    Properties

    name: string

    Task function name.

    +
    priority?: number

    Task function priority. Lower values have higher priority.

    +
    strategy?:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN"

    Task function worker choice strategy.

    +
    diff --git a/docs/interfaces/src.TaskPerformance.html b/docs/interfaces/src.TaskPerformance.html new file mode 100644 index 00000000..018516e0 --- /dev/null +++ b/docs/interfaces/src.TaskPerformance.html @@ -0,0 +1,10 @@ +TaskPerformance | poolifier - v4.4.4

    Interface TaskPerformanceInternal

    Task performance.

    +
    interface TaskPerformance {
        elu?: EventLoopUtilization;
        name: string;
        runTime?: number;
        timestamp: number;
    }

    Properties

    Properties

    elu?: EventLoopUtilization

    Task event loop utilization.

    +
    name: string

    Task name.

    +
    runTime?: number

    Task runtime.

    +
    timestamp: number

    Task performance timestamp.

    +
    diff --git a/docs/interfaces/src.TaskStatistics.html b/docs/interfaces/src.TaskStatistics.html new file mode 100644 index 00000000..457293db --- /dev/null +++ b/docs/interfaces/src.TaskStatistics.html @@ -0,0 +1,16 @@ +TaskStatistics | poolifier - v4.4.4

    Interface TaskStatisticsInternal

    Task statistics.

    +
    interface TaskStatistics {
        executed: number;
        executing: number;
        failed: number;
        maxQueued?: number;
        queued: number;
        sequentiallyStolen: number;
        stolen: number;
    }

    Properties

    executed: number

    Number of executed tasks.

    +
    executing: number

    Number of executing tasks.

    +
    failed: number

    Number of failed tasks.

    +
    maxQueued?: number

    Maximum number of queued tasks.

    +
    queued: number

    Number of queued tasks.

    +
    sequentiallyStolen: number

    Number of sequentially stolen tasks.

    +
    stolen: number

    Number of stolen tasks.

    +
    diff --git a/docs/interfaces/src.TaskStatisticsRequirements.html b/docs/interfaces/src.TaskStatisticsRequirements.html new file mode 100644 index 00000000..fb61cd50 --- /dev/null +++ b/docs/interfaces/src.TaskStatisticsRequirements.html @@ -0,0 +1,8 @@ +TaskStatisticsRequirements | poolifier - v4.4.4

    Interface TaskStatisticsRequirementsInternal

    Pool worker node worker usage statistics requirements.

    +
    interface TaskStatisticsRequirements {
        elu: MeasurementStatisticsRequirements;
        runTime: MeasurementStatisticsRequirements;
        waitTime: MeasurementStatisticsRequirements;
    }

    Properties

    Properties

    Tasks event loop utilization requirements.

    +

    Tasks runtime requirements.

    +

    Tasks wait time requirements.

    +
    diff --git a/docs/interfaces/src.TasksQueueOptions.html b/docs/interfaces/src.TasksQueueOptions.html new file mode 100644 index 00000000..09d808a6 --- /dev/null +++ b/docs/interfaces/src.TasksQueueOptions.html @@ -0,0 +1,32 @@ +TasksQueueOptions | poolifier - v4.4.4

    Interface TasksQueueOptions

    Worker node tasks queue options.

    +
    interface TasksQueueOptions {
        concurrency?: number;
        size?: number;
        tasksFinishedTimeout?: number;
        tasksStealingOnBackPressure?: boolean;
        tasksStealingRatio?: number;
        taskStealing?: boolean;
    }

    Properties

    concurrency?: number

    Maximum number of tasks that can be executed concurrently on a worker node.

    +
    1
    +
    + +
    size?: number

    Maximum tasks queue size per worker node flagging it as back pressured.

    +
    (pool maximum size)^2
    +
    + +
    tasksFinishedTimeout?: number

    Queued tasks finished timeout in milliseconds at worker node termination.

    +
    2000
    +
    + +
    tasksStealingOnBackPressure?: boolean

    Whether to enable tasks stealing under back pressure.

    +
    true
    +
    + +
    tasksStealingRatio?: number

    Ratio of worker nodes that can steal tasks from another worker node.

    +
    0.6
    +
    + +
    taskStealing?: boolean

    Whether to enable task stealing on idle.

    +
    true
    +
    + +
    diff --git a/docs/interfaces/src.WorkerChoiceStrategyOptions.html b/docs/interfaces/src.WorkerChoiceStrategyOptions.html new file mode 100644 index 00000000..123cf099 --- /dev/null +++ b/docs/interfaces/src.WorkerChoiceStrategyOptions.html @@ -0,0 +1,25 @@ +WorkerChoiceStrategyOptions | poolifier - v4.4.4

    Interface WorkerChoiceStrategyOptions

    Worker choice strategy options.

    +
    interface WorkerChoiceStrategyOptions {
        elu?: MeasurementOptions;
        measurement?: "elu" | "runTime" | "waitTime";
        runTime?: MeasurementOptions;
        waitTime?: MeasurementOptions;
        weights?: Record<number, number>;
    }

    Properties

    Event loop utilization options.

    +
    { median: false }
    +
    + +
    measurement?: "elu" | "runTime" | "waitTime"

    Measurement to use in worker choice strategy supporting it.

    +

    Runtime options.

    +
    { median: false }
    +
    + +

    Wait time options.

    +
    { median: false }
    +
    + +
    weights?: Record<number, number>

    Worker weights to use for weighted round robin worker selection strategies. +A weight is tasks maximum execution time in milliseconds for a worker node.

    +
    Weights computed automatically given the CPU performance.
    +
    + +
    diff --git a/docs/interfaces/src.WorkerError.html b/docs/interfaces/src.WorkerError.html new file mode 100644 index 00000000..1db28b47 --- /dev/null +++ b/docs/interfaces/src.WorkerError.html @@ -0,0 +1,13 @@ +WorkerError | poolifier - v4.4.4

    Interface WorkerError<Data>

    Worker error.

    +
    interface WorkerError<Data> {
        data?: Data;
        error?: Error;
        message: string;
        name?: string;
        stack?: string;
    }

    Type Parameters

    • Data = unknown

      Type of data sent to the worker triggering an error. This can only be structured-cloneable data.

      +

    Properties

    Properties

    data?: Data

    Data triggering the error.

    +
    error?: Error

    Error object.

    +
    message: string

    Error message.

    +
    name?: string

    Task function name triggering the error.

    +
    stack?: string

    Error stack trace.

    +
    diff --git a/docs/interfaces/src.WorkerInfo.html b/docs/interfaces/src.WorkerInfo.html new file mode 100644 index 00000000..3c6a2d32 --- /dev/null +++ b/docs/interfaces/src.WorkerInfo.html @@ -0,0 +1,27 @@ +WorkerInfo | poolifier - v4.4.4

    Interface WorkerInfoInternal

    Worker information.

    +
    interface WorkerInfo {
        backPressure: boolean;
        backPressureStealing: boolean;
        continuousStealing: boolean;
        dynamic: boolean;
        id: undefined | number;
        ready: boolean;
        stealing: boolean;
        stolen: boolean;
        taskFunctionsProperties?: TaskFunctionProperties[];
        type: "cluster" | "thread";
    }

    Properties

    backPressure: boolean

    Back pressure flag. +This flag is set to true when worker node tasks queue is back pressured.

    +
    backPressureStealing: boolean

    Back pressure stealing flag. +This flag is set to true when worker node is stealing one task from another back pressured worker node.

    +
    continuousStealing: boolean

    Continuous stealing flag. +This flag is set to true when worker node is continuously stealing tasks from other worker nodes.

    +
    dynamic: boolean

    Dynamic flag.

    +
    id: undefined | number

    Worker id.

    +
    ready: boolean

    Ready flag.

    +
    stealing: boolean

    Stealing flag. +This flag is set to true when worker node is stealing one task from another worker node.

    +
    stolen: boolean

    Stolen flag. +This flag is set to true when worker node has one task stolen from another worker node.

    +
    taskFunctionsProperties?: TaskFunctionProperties[]

    Task functions properties.

    +
    type: "cluster" | "thread"

    Worker type.

    +
    diff --git a/docs/interfaces/src.WorkerNodeEventDetail.html b/docs/interfaces/src.WorkerNodeEventDetail.html new file mode 100644 index 00000000..414f153b --- /dev/null +++ b/docs/interfaces/src.WorkerNodeEventDetail.html @@ -0,0 +1,4 @@ +WorkerNodeEventDetail | poolifier - v4.4.4

    Interface WorkerNodeEventDetailInternal

    Worker node event detail.

    +
    interface WorkerNodeEventDetail {
        workerId?: number;
        workerNodeKey?: number;
    }

    Properties

    workerId?: number
    workerNodeKey?: number
    diff --git a/docs/interfaces/src.WorkerNodeOptions.html b/docs/interfaces/src.WorkerNodeOptions.html new file mode 100644 index 00000000..5dd61ff3 --- /dev/null +++ b/docs/interfaces/src.WorkerNodeOptions.html @@ -0,0 +1,7 @@ +WorkerNodeOptions | poolifier - v4.4.4

    Interface WorkerNodeOptionsInternal

    Worker node options.

    +
    interface WorkerNodeOptions {
        env?: Record<string, unknown>;
        tasksQueueBackPressureSize: undefined | number;
        tasksQueueBucketSize: undefined | number;
        tasksQueuePriority: undefined | boolean;
        workerOptions?: WorkerOptions;
    }

    Properties

    env?: Record<string, unknown>
    tasksQueueBackPressureSize: undefined | number
    tasksQueueBucketSize: undefined | number
    tasksQueuePriority: undefined | boolean
    workerOptions?: WorkerOptions
    diff --git a/docs/interfaces/src.WorkerOptions.html b/docs/interfaces/src.WorkerOptions.html new file mode 100644 index 00000000..49a9cd78 --- /dev/null +++ b/docs/interfaces/src.WorkerOptions.html @@ -0,0 +1,27 @@ +WorkerOptions | poolifier - v4.4.4

    Interface WorkerOptions

    Options for workers.

    +
    interface WorkerOptions {
        killBehavior?: "HARD" | "SOFT";
        killHandler?: KillHandler;
        maxInactiveTime?: number;
    }

    Properties

    killBehavior?: "HARD" | "SOFT"

    killBehavior dictates if your worker will be deleted in case a task is active on it.

    +
      +
    • SOFT: If currentTime - lastActiveTime is greater than maxInactiveTime but the worker is stealing tasks or a task is executing or queued, then the worker won't be deleted.
    • +
    • HARD: If currentTime - lastActiveTime is greater than maxInactiveTime but the worker is stealing tasks or a task is executing or queued, then the worker will be deleted.
    • +
    +

    This option only apply to the newly created workers.

    +
    KillBehaviors.SOFT
    +
    + +
    killHandler?: KillHandler

    The function to call when a worker is killed.

    +

    () => {}

    +
    maxInactiveTime?: number

    Maximum waiting time in milliseconds for tasks on newly created workers. It must be greater or equal than 5.

    +

    After this time, newly created workers will be terminated. +The last active time of your worker will be updated when it terminates a task.

    +
      +
    • If killBehavior is set to KillBehaviors.HARD this value represents also the timeout for the tasks that you submit to the pool, +when this timeout expires your tasks is interrupted before completion and removed. The worker is killed if is not part of the minimum size of the pool.
    • +
    • If killBehavior is set to KillBehaviors.SOFT your tasks have no timeout and your workers will not be terminated until your task is completed.
    • +
    +
    60000
    +
    + +
    diff --git a/docs/interfaces/src.WorkerStatistics.html b/docs/interfaces/src.WorkerStatistics.html new file mode 100644 index 00000000..02ec09d2 --- /dev/null +++ b/docs/interfaces/src.WorkerStatistics.html @@ -0,0 +1,6 @@ +WorkerStatistics | poolifier - v4.4.4

    Interface WorkerStatisticsInternal

    Worker task performance statistics computation settings.

    +
    interface WorkerStatistics {
        elu: boolean;
        runTime: boolean;
    }

    Properties

    Properties

    elu: boolean

    Whether the worker computes the task event loop utilization (ELU) or not.

    +
    runTime: boolean

    Whether the worker computes the task runtime or not.

    +
    diff --git a/docs/interfaces/src.WorkerUsage.html b/docs/interfaces/src.WorkerUsage.html new file mode 100644 index 00000000..d03e0452 --- /dev/null +++ b/docs/interfaces/src.WorkerUsage.html @@ -0,0 +1,10 @@ +WorkerUsage | poolifier - v4.4.4

    Interface WorkerUsageInternal

    Worker usage statistics.

    +
    interface WorkerUsage {
        elu: EventLoopUtilizationMeasurementStatistics;
        runTime: MeasurementStatistics;
        tasks: TaskStatistics;
        waitTime: MeasurementStatistics;
    }

    Properties

    Properties

    Tasks event loop utilization statistics.

    +

    Tasks runtime statistics.

    +

    Tasks statistics.

    +

    Tasks wait time statistics.

    +
    diff --git a/docs/media/README.md b/docs/media/README.md new file mode 100644 index 00000000..319cafcf --- /dev/null +++ b/docs/media/README.md @@ -0,0 +1,29 @@ +# Poolifier benchmarks + +Welcome to poolifier benchmarks. + +## Table of contents + +- [Folder Structure](#folder-structure) +- [Poolifier benchmark versus other worker pools](#poolifier-benchmark-versus-other-worker-pools) +- [Poolifier internal benchmark](#poolifier-internal-benchmark) + - [Usage](#usage) + - [Results](#results) + +## Folder Structure + +The [internal](./internal) folder contains poolifier internal benchmark code. + +## Poolifier benchmark versus other worker pools + +See the dedicated repository [README.md](https://github.com/poolifier/benchmark#readme). + +## Poolifier internal benchmark + +### Usage + +To run the internal benchmark, you just need to navigate to the root of poolifier cloned repository and run: + +- `pnpm benchmark:tatami-ng` + +### [Results](https://bencher.dev/perf/poolifier) diff --git a/docs/modules/src.html b/docs/modules/src.html new file mode 100644 index 00000000..b9897891 --- /dev/null +++ b/docs/modules/src.html @@ -0,0 +1,70 @@ +src | poolifier - v4.4.4
    diff --git a/docs/types/ClusterPoolOptions.html b/docs/types/ClusterPoolOptions.html deleted file mode 100644 index b0823350..00000000 --- a/docs/types/ClusterPoolOptions.html +++ /dev/null @@ -1,2 +0,0 @@ -ClusterPoolOptions | poolifier - v4.4.4

    Type Alias ClusterPoolOptions

    ClusterPoolOptions: PoolOptions<Worker>

    Options for a poolifier cluster pool.

    -
    diff --git a/docs/types/ErrorHandler.html b/docs/types/ErrorHandler.html deleted file mode 100644 index 6ed91f79..00000000 --- a/docs/types/ErrorHandler.html +++ /dev/null @@ -1,3 +0,0 @@ -ErrorHandler | poolifier - v4.4.4

    Type Alias ErrorHandler<Worker>

    ErrorHandler<Worker>: ((this: Worker, error: Error) => void)

    Callback invoked if the worker raised an error.

    -

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      -
    diff --git a/docs/types/EventHandler.html b/docs/types/EventHandler.html deleted file mode 100644 index 7c329898..00000000 --- a/docs/types/EventHandler.html +++ /dev/null @@ -1,3 +0,0 @@ -EventHandler | poolifier - v4.4.4

    Type Alias EventHandler<Worker>

    EventHandler<Worker>:
        | ErrorHandler<Worker>
        | ExitHandler<Worker>
        | MessageHandler<Worker>
        | OnlineHandler<Worker>

    Worker event handler.

    -

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      -
    diff --git a/docs/types/ExitHandler.html b/docs/types/ExitHandler.html deleted file mode 100644 index 4e1ad54c..00000000 --- a/docs/types/ExitHandler.html +++ /dev/null @@ -1,3 +0,0 @@ -ExitHandler | poolifier - v4.4.4

    Type Alias ExitHandler<Worker>

    ExitHandler<Worker>: ((this: Worker, exitCode: number) => void)

    Callback invoked when the worker exits successfully.

    -

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      -
    diff --git a/docs/types/KillBehavior.html b/docs/types/KillBehavior.html deleted file mode 100644 index 09f6bff4..00000000 --- a/docs/types/KillBehavior.html +++ /dev/null @@ -1,2 +0,0 @@ -KillBehavior | poolifier - v4.4.4

    Type Alias KillBehavior

    KillBehavior: keyof typeof KillBehaviors

    Kill behavior.

    -
    diff --git a/docs/types/KillHandler.html b/docs/types/KillHandler.html deleted file mode 100644 index dcb82566..00000000 --- a/docs/types/KillHandler.html +++ /dev/null @@ -1,2 +0,0 @@ -KillHandler | poolifier - v4.4.4

    Type Alias KillHandler

    KillHandler: (() => Promise<void> | void)

    Handler called when a worker is killed.

    -
    diff --git a/docs/types/Measurement.html b/docs/types/Measurement.html deleted file mode 100644 index db2a42fd..00000000 --- a/docs/types/Measurement.html +++ /dev/null @@ -1,2 +0,0 @@ -Measurement | poolifier - v4.4.4

    Type Alias Measurement

    Measurement: keyof typeof Measurements

    Measurement.

    -
    diff --git a/docs/types/MessageHandler.html b/docs/types/MessageHandler.html deleted file mode 100644 index d4baffd6..00000000 --- a/docs/types/MessageHandler.html +++ /dev/null @@ -1,3 +0,0 @@ -MessageHandler | poolifier - v4.4.4

    Type Alias MessageHandler<Worker>

    MessageHandler<Worker>: ((this: Worker, message: unknown) => void)

    Callback invoked if the worker has received a message.

    -

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      -
    diff --git a/docs/types/OnlineHandler.html b/docs/types/OnlineHandler.html deleted file mode 100644 index 33344c43..00000000 --- a/docs/types/OnlineHandler.html +++ /dev/null @@ -1,3 +0,0 @@ -OnlineHandler | poolifier - v4.4.4

    Type Alias OnlineHandler<Worker>

    OnlineHandler<Worker>: ((this: Worker) => void)

    Callback invoked when the worker has started successfully.

    -

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      -
    diff --git a/docs/types/PoolEvent.html b/docs/types/PoolEvent.html deleted file mode 100644 index dc1334fb..00000000 --- a/docs/types/PoolEvent.html +++ /dev/null @@ -1,2 +0,0 @@ -PoolEvent | poolifier - v4.4.4

    Type Alias PoolEvent

    PoolEvent: keyof typeof PoolEvents

    Pool event.

    -
    diff --git a/docs/types/PoolType.html b/docs/types/PoolType.html deleted file mode 100644 index e3c2375f..00000000 --- a/docs/types/PoolType.html +++ /dev/null @@ -1,2 +0,0 @@ -PoolType | poolifier - v4.4.4

    Type Alias PoolType

    PoolType: keyof typeof PoolTypes

    Pool type.

    -
    diff --git a/docs/types/TaskAsyncFunction.html b/docs/types/TaskAsyncFunction.html deleted file mode 100644 index ec0ae233..00000000 --- a/docs/types/TaskAsyncFunction.html +++ /dev/null @@ -1,7 +0,0 @@ -TaskAsyncFunction | poolifier - v4.4.4

    Type Alias TaskAsyncFunction<Data, Response>

    TaskAsyncFunction<Data, Response>: ((data?: Data) => Promise<Response>)

    Task asynchronous function that can be executed. -This function must return a promise.

    -

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      -
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      -

    Type declaration

      • (data?): Promise<Response>
      • Parameters

        • Optionaldata: Data

          Data sent to the worker.

          -

        Returns Promise<Response>

        Execution response promise.

        -
    diff --git a/docs/types/TaskFunction.html b/docs/types/TaskFunction.html deleted file mode 100644 index d5029756..00000000 --- a/docs/types/TaskFunction.html +++ /dev/null @@ -1,5 +0,0 @@ -TaskFunction | poolifier - v4.4.4

    Type Alias TaskFunction<Data, Response>

    Task function that can be executed. -This function can be synchronous or asynchronous.

    -

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      -
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      -
    diff --git a/docs/types/TaskSyncFunction.html b/docs/types/TaskSyncFunction.html deleted file mode 100644 index e58e488b..00000000 --- a/docs/types/TaskSyncFunction.html +++ /dev/null @@ -1,6 +0,0 @@ -TaskSyncFunction | poolifier - v4.4.4

    Type Alias TaskSyncFunction<Data, Response>

    TaskSyncFunction<Data, Response>: ((data?: Data) => Response)

    Task synchronous function that can be executed.

    -

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      -
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      -

    Type declaration

      • (data?): Response
      • Parameters

        • Optionaldata: Data

          Data sent to the worker.

          -

        Returns Response

        Execution response.

        -
    diff --git a/docs/types/ThreadPoolOptions.html b/docs/types/ThreadPoolOptions.html deleted file mode 100644 index 2b9d74c6..00000000 --- a/docs/types/ThreadPoolOptions.html +++ /dev/null @@ -1,2 +0,0 @@ -ThreadPoolOptions | poolifier - v4.4.4

    Type Alias ThreadPoolOptions

    ThreadPoolOptions: PoolOptions<Worker>

    Options for a poolifier thread pool.

    -
    diff --git a/docs/types/WorkerType.html b/docs/types/WorkerType.html deleted file mode 100644 index 886c7d8d..00000000 --- a/docs/types/WorkerType.html +++ /dev/null @@ -1,2 +0,0 @@ -WorkerType | poolifier - v4.4.4

    Type Alias WorkerType

    WorkerType: keyof typeof WorkerTypes

    Worker type.

    -
    diff --git a/docs/types/Writable.html b/docs/types/Writable.html deleted file mode 100644 index 68679ef8..00000000 --- a/docs/types/Writable.html +++ /dev/null @@ -1,3 +0,0 @@ -Writable | poolifier - v4.4.4

    Type Alias Writable<T>Internal

    Writable<T>: {
        -readonly [P in keyof T]: T[P]
    }

    Remove readonly modifier from all properties of T.

    -

    Type Parameters

    • T

      Type to remove readonly modifier.

      -
    diff --git a/docs/types/WorkerChoiceStrategy.html b/docs/types/src.ClusterPoolOptions.html similarity index 50% rename from docs/types/WorkerChoiceStrategy.html rename to docs/types/src.ClusterPoolOptions.html index 6d2c8d7a..097198d0 100644 --- a/docs/types/WorkerChoiceStrategy.html +++ b/docs/types/src.ClusterPoolOptions.html @@ -1,2 +1,2 @@ -WorkerChoiceStrategy | poolifier - v4.4.4

    Type Alias WorkerChoiceStrategy

    WorkerChoiceStrategy: keyof typeof WorkerChoiceStrategies

    Worker choice strategy.

    -
    +ClusterPoolOptions | poolifier - v4.4.4

    Type Alias ClusterPoolOptions

    ClusterPoolOptions: PoolOptions<Worker>

    Options for a poolifier cluster pool.

    +
    diff --git a/docs/types/src.ErrorHandler.html b/docs/types/src.ErrorHandler.html new file mode 100644 index 00000000..653024e7 --- /dev/null +++ b/docs/types/src.ErrorHandler.html @@ -0,0 +1,3 @@ +ErrorHandler | poolifier - v4.4.4

    Type Alias ErrorHandler<Worker>

    ErrorHandler<Worker>: ((this: Worker, error: Error) => void)

    Callback invoked if the worker raised an error.

    +

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      +
    diff --git a/docs/types/src.EventHandler.html b/docs/types/src.EventHandler.html new file mode 100644 index 00000000..5846f858 --- /dev/null +++ b/docs/types/src.EventHandler.html @@ -0,0 +1,3 @@ +EventHandler | poolifier - v4.4.4

    Type Alias EventHandler<Worker>

    EventHandler<Worker>:
        | ErrorHandler<Worker>
        | ExitHandler<Worker>
        | MessageHandler<Worker>
        | OnlineHandler<Worker>

    Worker event handler.

    +

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      +
    diff --git a/docs/types/src.ExitHandler.html b/docs/types/src.ExitHandler.html new file mode 100644 index 00000000..8c672b38 --- /dev/null +++ b/docs/types/src.ExitHandler.html @@ -0,0 +1,3 @@ +ExitHandler | poolifier - v4.4.4

    Type Alias ExitHandler<Worker>

    ExitHandler<Worker>: ((this: Worker, exitCode: number) => void)

    Callback invoked when the worker exits successfully.

    +

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      +
    diff --git a/docs/types/src.KillBehavior.html b/docs/types/src.KillBehavior.html new file mode 100644 index 00000000..eb49cab4 --- /dev/null +++ b/docs/types/src.KillBehavior.html @@ -0,0 +1,2 @@ +KillBehavior | poolifier - v4.4.4

    Type Alias KillBehavior

    KillBehavior: keyof typeof KillBehaviors

    Kill behavior.

    +
    diff --git a/docs/types/src.KillHandler.html b/docs/types/src.KillHandler.html new file mode 100644 index 00000000..124f47f4 --- /dev/null +++ b/docs/types/src.KillHandler.html @@ -0,0 +1,2 @@ +KillHandler | poolifier - v4.4.4

    Type Alias KillHandler

    KillHandler: (() => Promise<void> | void)

    Handler called when a worker is killed.

    +
    diff --git a/docs/types/src.Measurement.html b/docs/types/src.Measurement.html new file mode 100644 index 00000000..875be314 --- /dev/null +++ b/docs/types/src.Measurement.html @@ -0,0 +1,2 @@ +Measurement | poolifier - v4.4.4

    Type Alias Measurement

    Measurement: keyof typeof Measurements

    Measurement.

    +
    diff --git a/docs/types/src.MessageHandler.html b/docs/types/src.MessageHandler.html new file mode 100644 index 00000000..19927f4c --- /dev/null +++ b/docs/types/src.MessageHandler.html @@ -0,0 +1,3 @@ +MessageHandler | poolifier - v4.4.4

    Type Alias MessageHandler<Worker>

    MessageHandler<Worker>: ((this: Worker, message: unknown) => void)

    Callback invoked if the worker has received a message.

    +

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      +
    diff --git a/docs/types/src.OnlineHandler.html b/docs/types/src.OnlineHandler.html new file mode 100644 index 00000000..bb0ee6b4 --- /dev/null +++ b/docs/types/src.OnlineHandler.html @@ -0,0 +1,3 @@ +OnlineHandler | poolifier - v4.4.4

    Type Alias OnlineHandler<Worker>

    OnlineHandler<Worker>: ((this: Worker) => void)

    Callback invoked when the worker has started successfully.

    +

    Type Parameters

    • Worker extends IWorker

      Type of worker.

      +
    diff --git a/docs/types/src.PoolEvent.html b/docs/types/src.PoolEvent.html new file mode 100644 index 00000000..454f553d --- /dev/null +++ b/docs/types/src.PoolEvent.html @@ -0,0 +1,2 @@ +PoolEvent | poolifier - v4.4.4

    Type Alias PoolEvent

    PoolEvent: keyof typeof PoolEvents

    Pool event.

    +
    diff --git a/docs/types/src.PoolType.html b/docs/types/src.PoolType.html new file mode 100644 index 00000000..dab09f40 --- /dev/null +++ b/docs/types/src.PoolType.html @@ -0,0 +1,2 @@ +PoolType | poolifier - v4.4.4

    Type Alias PoolType

    PoolType: keyof typeof PoolTypes

    Pool type.

    +
    diff --git a/docs/types/src.TaskAsyncFunction.html b/docs/types/src.TaskAsyncFunction.html new file mode 100644 index 00000000..177d3d59 --- /dev/null +++ b/docs/types/src.TaskAsyncFunction.html @@ -0,0 +1,7 @@ +TaskAsyncFunction | poolifier - v4.4.4

    Type Alias TaskAsyncFunction<Data, Response>

    TaskAsyncFunction<Data, Response>: ((data?: Data) => Promise<Response>)

    Task asynchronous function that can be executed. +This function must return a promise.

    +

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      +
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      +

    Type declaration

      • (data?): Promise<Response>
      • Parameters

        • Optionaldata: Data

          Data sent to the worker.

          +

        Returns Promise<Response>

        Execution response promise.

        +
    diff --git a/docs/types/src.TaskFunction.html b/docs/types/src.TaskFunction.html new file mode 100644 index 00000000..4f998cf9 --- /dev/null +++ b/docs/types/src.TaskFunction.html @@ -0,0 +1,5 @@ +TaskFunction | poolifier - v4.4.4

    Type Alias TaskFunction<Data, Response>

    Task function that can be executed. +This function can be synchronous or asynchronous.

    +

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      +
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      +
    diff --git a/docs/types/src.TaskFunctions.html b/docs/types/src.TaskFunctions.html new file mode 100644 index 00000000..493b1696 --- /dev/null +++ b/docs/types/src.TaskFunctions.html @@ -0,0 +1,6 @@ +TaskFunctions | poolifier - v4.4.4

    Type Alias TaskFunctions<Data, Response>

    TaskFunctions<Data, Response>: Record<string, TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>>

    Tasks functions that can be executed. +The key is the name of the task function or task function object. +The value is the task function or task function object.

    +

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      +
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      +
    diff --git a/docs/types/src.TaskSyncFunction.html b/docs/types/src.TaskSyncFunction.html new file mode 100644 index 00000000..e7e5ef17 --- /dev/null +++ b/docs/types/src.TaskSyncFunction.html @@ -0,0 +1,6 @@ +TaskSyncFunction | poolifier - v4.4.4

    Type Alias TaskSyncFunction<Data, Response>

    TaskSyncFunction<Data, Response>: ((data?: Data) => Response)

    Task synchronous function that can be executed.

    +

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      +
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      +

    Type declaration

      • (data?): Response
      • Parameters

        • Optionaldata: Data

          Data sent to the worker.

          +

        Returns Response

        Execution response.

        +
    diff --git a/docs/types/src.ThreadPoolOptions.html b/docs/types/src.ThreadPoolOptions.html new file mode 100644 index 00000000..0b5c0dfa --- /dev/null +++ b/docs/types/src.ThreadPoolOptions.html @@ -0,0 +1,2 @@ +ThreadPoolOptions | poolifier - v4.4.4

    Type Alias ThreadPoolOptions

    ThreadPoolOptions: PoolOptions<Worker>

    Options for a poolifier thread pool.

    +
    diff --git a/docs/types/src.WorkerChoiceStrategy.html b/docs/types/src.WorkerChoiceStrategy.html new file mode 100644 index 00000000..84b72c58 --- /dev/null +++ b/docs/types/src.WorkerChoiceStrategy.html @@ -0,0 +1,2 @@ +WorkerChoiceStrategy | poolifier - v4.4.4

    Type Alias WorkerChoiceStrategy

    WorkerChoiceStrategy: keyof typeof WorkerChoiceStrategies

    Worker choice strategy.

    +
    diff --git a/docs/types/src.WorkerType.html b/docs/types/src.WorkerType.html new file mode 100644 index 00000000..3b7417c5 --- /dev/null +++ b/docs/types/src.WorkerType.html @@ -0,0 +1,2 @@ +WorkerType | poolifier - v4.4.4

    Type Alias WorkerType

    WorkerType: keyof typeof WorkerTypes

    Worker type.

    +
    diff --git a/docs/types/src.Writable.html b/docs/types/src.Writable.html new file mode 100644 index 00000000..27d0274c --- /dev/null +++ b/docs/types/src.Writable.html @@ -0,0 +1,3 @@ +Writable | poolifier - v4.4.4

    Type Alias Writable<T>Internal

    Writable<T>: {
        -readonly [P in keyof T]: T[P]
    }

    Remove readonly modifier from all properties of T.

    +

    Type Parameters

    • T

      Type to remove readonly modifier.

      +
    diff --git a/docs/variables/KillBehaviors.html b/docs/variables/KillBehaviors.html deleted file mode 100644 index 0273779d..00000000 --- a/docs/variables/KillBehaviors.html +++ /dev/null @@ -1,2 +0,0 @@ -KillBehaviors | poolifier - v4.4.4

    Variable KillBehaviorsConst

    KillBehaviors: Readonly<{
        HARD: "HARD";
        SOFT: "SOFT";
    }> = ...

    Enumeration of kill behaviors.

    -
    diff --git a/docs/variables/Measurements.html b/docs/variables/Measurements.html deleted file mode 100644 index 24f3cfaf..00000000 --- a/docs/variables/Measurements.html +++ /dev/null @@ -1,2 +0,0 @@ -Measurements | poolifier - v4.4.4

    Variable MeasurementsConst

    Measurements: Readonly<{
        elu: "elu";
        runTime: "runTime";
        waitTime: "waitTime";
    }> = ...

    Enumeration of measurements.

    -
    diff --git a/docs/variables/PoolEvents.html b/docs/variables/PoolEvents.html deleted file mode 100644 index a6b9f968..00000000 --- a/docs/variables/PoolEvents.html +++ /dev/null @@ -1,2 +0,0 @@ -PoolEvents | poolifier - v4.4.4

    Variable PoolEventsConst

    PoolEvents: Readonly<{
        backPressure: "backPressure";
        backPressureEnd: "backPressureEnd";
        busy: "busy";
        busyEnd: "busyEnd";
        destroy: "destroy";
        empty: "empty";
        error: "error";
        full: "full";
        fullEnd: "fullEnd";
        ready: "ready";
        taskError: "taskError";
    }> = ...

    Enumeration of pool events.

    -
    diff --git a/docs/variables/PoolTypes.html b/docs/variables/PoolTypes.html deleted file mode 100644 index af13a528..00000000 --- a/docs/variables/PoolTypes.html +++ /dev/null @@ -1,2 +0,0 @@ -PoolTypes | poolifier - v4.4.4

    Variable PoolTypesConst

    PoolTypes: Readonly<{
        dynamic: "dynamic";
        fixed: "fixed";
    }> = ...

    Enumeration of pool types.

    -
    diff --git a/docs/variables/WorkerChoiceStrategies.html b/docs/variables/WorkerChoiceStrategies.html deleted file mode 100644 index 0d02ae9a..00000000 --- a/docs/variables/WorkerChoiceStrategies.html +++ /dev/null @@ -1,2 +0,0 @@ -WorkerChoiceStrategies | poolifier - v4.4.4

    Variable WorkerChoiceStrategiesConst

    WorkerChoiceStrategies: Readonly<{
        FAIR_SHARE: "FAIR_SHARE";
        INTERLEAVED_WEIGHTED_ROUND_ROBIN: "INTERLEAVED_WEIGHTED_ROUND_ROBIN";
        LEAST_BUSY: "LEAST_BUSY";
        LEAST_ELU: "LEAST_ELU";
        LEAST_USED: "LEAST_USED";
        ROUND_ROBIN: "ROUND_ROBIN";
        WEIGHTED_ROUND_ROBIN: "WEIGHTED_ROUND_ROBIN";
    }> = ...

    Enumeration of worker choice strategies.

    -
    diff --git a/docs/variables/WorkerTypes.html b/docs/variables/WorkerTypes.html deleted file mode 100644 index 02f1c945..00000000 --- a/docs/variables/WorkerTypes.html +++ /dev/null @@ -1,2 +0,0 @@ -WorkerTypes | poolifier - v4.4.4

    Variable WorkerTypesConst

    WorkerTypes: Readonly<{
        cluster: "cluster";
        thread: "thread";
    }> = ...

    Enumeration of worker types.

    -
    diff --git a/docs/types/TaskFunctions.html b/docs/variables/src.KillBehaviors.html similarity index 60% rename from docs/types/TaskFunctions.html rename to docs/variables/src.KillBehaviors.html index 8235e8ed..17bbed16 100644 --- a/docs/types/TaskFunctions.html +++ b/docs/variables/src.KillBehaviors.html @@ -1,6 +1,2 @@ -TaskFunctions | poolifier - v4.4.4

    Type Alias TaskFunctions<Data, Response>

    TaskFunctions<Data, Response>: Record<string, TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>>

    Tasks functions that can be executed. -The key is the name of the task function or task function object. -The value is the task function or task function object.

    -

    Type Parameters

    • Data = unknown

      Type of data sent to the worker. This can only be structured-cloneable data.

      -
    • Response = unknown

      Type of execution response. This can only be structured-cloneable data.

      -
    +KillBehaviors | poolifier - v4.4.4

    Variable KillBehaviorsConst

    KillBehaviors: Readonly<{
        HARD: "HARD";
        SOFT: "SOFT";
    }> = ...

    Enumeration of kill behaviors.

    +
    diff --git a/docs/variables/src.Measurements.html b/docs/variables/src.Measurements.html new file mode 100644 index 00000000..d729f426 --- /dev/null +++ b/docs/variables/src.Measurements.html @@ -0,0 +1,2 @@ +Measurements | poolifier - v4.4.4

    Variable MeasurementsConst

    Measurements: Readonly<{
        elu: "elu";
        runTime: "runTime";
        waitTime: "waitTime";
    }> = ...

    Enumeration of measurements.

    +
    diff --git a/docs/variables/src.PoolEvents.html b/docs/variables/src.PoolEvents.html new file mode 100644 index 00000000..daabcedf --- /dev/null +++ b/docs/variables/src.PoolEvents.html @@ -0,0 +1,2 @@ +PoolEvents | poolifier - v4.4.4

    Variable PoolEventsConst

    PoolEvents: Readonly<{
        backPressure: "backPressure";
        backPressureEnd: "backPressureEnd";
        busy: "busy";
        busyEnd: "busyEnd";
        destroy: "destroy";
        empty: "empty";
        error: "error";
        full: "full";
        fullEnd: "fullEnd";
        ready: "ready";
        taskError: "taskError";
    }> = ...

    Enumeration of pool events.

    +
    diff --git a/docs/variables/src.PoolTypes.html b/docs/variables/src.PoolTypes.html new file mode 100644 index 00000000..b1e62389 --- /dev/null +++ b/docs/variables/src.PoolTypes.html @@ -0,0 +1,2 @@ +PoolTypes | poolifier - v4.4.4

    Variable PoolTypesConst

    PoolTypes: Readonly<{
        dynamic: "dynamic";
        fixed: "fixed";
    }> = ...

    Enumeration of pool types.

    +
    diff --git a/docs/variables/src.WorkerChoiceStrategies.html b/docs/variables/src.WorkerChoiceStrategies.html new file mode 100644 index 00000000..0a2bd3c0 --- /dev/null +++ b/docs/variables/src.WorkerChoiceStrategies.html @@ -0,0 +1,2 @@ +WorkerChoiceStrategies | poolifier - v4.4.4

    Variable WorkerChoiceStrategiesConst

    WorkerChoiceStrategies: Readonly<{
        FAIR_SHARE: "FAIR_SHARE";
        INTERLEAVED_WEIGHTED_ROUND_ROBIN: "INTERLEAVED_WEIGHTED_ROUND_ROBIN";
        LEAST_BUSY: "LEAST_BUSY";
        LEAST_ELU: "LEAST_ELU";
        LEAST_USED: "LEAST_USED";
        ROUND_ROBIN: "ROUND_ROBIN";
        WEIGHTED_ROUND_ROBIN: "WEIGHTED_ROUND_ROBIN";
    }> = ...

    Enumeration of worker choice strategies.

    +
    diff --git a/docs/variables/src.WorkerTypes.html b/docs/variables/src.WorkerTypes.html new file mode 100644 index 00000000..cc66bc99 --- /dev/null +++ b/docs/variables/src.WorkerTypes.html @@ -0,0 +1,2 @@ +WorkerTypes | poolifier - v4.4.4

    Variable WorkerTypesConst

    WorkerTypes: Readonly<{
        cluster: "cluster";
        thread: "thread";
    }> = ...

    Enumeration of worker types.

    +
    -- 2.34.1