X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=README.md;h=b907edf9bed8e0d0b89c8fe8524babcad1441b11;hb=4f4ae1cb3c33228a023ea599c2648268d15e6c0f;hp=7bb71d8033c84f7b5fdd26732286f90139039675;hpb=e72ecb532c87d1109c348c9b50051e053304492a;p=poolifier.git diff --git a/README.md b/README.md index 7bb71d80..b907edf9 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@

Weekly Downloads - - Actions Status + + Actions Status Quality Gate Status @@ -29,7 +29,7 @@ No dependencies

-## Why Poolifier? +## Why Poolifier? Poolifier is used to perform CPU intensive and I/O intensive tasks on nodejs servers, it implements worker pools (yes, more worker pool implementations, so you can choose which one fit better for you) using [worker-threads](https://nodejs.org/api/worker_threads.html#worker_threads_worker_threads) and cluster pools using [Node.js cluster](https://nodejs.org/api/cluster.html) modules. With poolifier you can improve your **performance** and resolve problems related to the event loop. @@ -65,7 +65,7 @@ Please consult our general guidelines · Usage · - Node versions + Node versions · API · @@ -146,19 +146,27 @@ Remember that workers can only send and receive serializable data. ## Node versions -You can use node versions 12.x, 13.x, 14.x +You can use node versions 12.x, 13.x, 14.x, 16.x ## API ### `pool = new FixedThreadPool/FixedClusterPool(numberOfThreads/numberOfWorkers, filePath, opts)` -`numberOfThreads/numberOfWorkers` (mandatory) Num of workers for this worker pool +`numberOfThreads/numberOfWorkers` (mandatory) Number of workers for this pool `filePath` (mandatory) Path to a file with a worker implementation -`opts` (optional) An object with these properties : +`opts` (optional) An object with these properties: + +- `errorHandler` (optional) - A function that will listen for error event on each worker +- `onlineHandler` (optional) - A function that will listen for online event on each worker +- `exitHandler` (optional) - A function that will listen for exit event on each worker +- `workerChoiceStrategy` (optional) - The work choice strategy to use in this pool: + + - `WorkerChoiceStrategies.ROUND_ROBIN`: Submit tasks to worker in this pool in a round robbin fashion + - `WorkerChoiceStrategies.LESS_RECENTLY_USED`: Submit tasks to the less recently used worker in the pool + + Default: `WorkerChoiceStrategies.ROUND_ROBIN` -- `errorHandler` - A function that will listen for error event on each worker -- `onlineHandler` - A function that will listen for online event on each worker -- `exitHandler` - A function that will listen for exit event on each worker +- `enableEvents` (optional) - Events emission enablement in this pool. Default: true ### `pool = new DynamicThreadPool/DynamicClusterPool(min, max, filePath, opts)` @@ -169,7 +177,7 @@ You can use node versions 12.x, 13.x, 14.x ### `pool.execute(data)` -Execute method is available on both pool implementations (return type : Promise): +Execute method is available on both pool implementations (return type: Promise): `data` (mandatory) An object that you want to pass to your worker implementation ### `pool.destroy()` @@ -190,10 +198,10 @@ This method will call the terminate method on each worker. - `async` - true/false, true if your function contains async pieces else false - `killBehavior` - Dictates if your async unit (worker/process) will be deleted in case that a task is active on it. - **SOFT**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still running, then the worker **won't** be deleted. - **HARD**: If `lastActiveTime` is greater than `maxInactiveTime` but a task is still running, then the worker will be deleted. + **KillBehaviors.SOFT**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still running, then the worker **won't** be deleted. + **KillBehaviors.HARD**: If `lastActiveTime` is greater than `maxInactiveTime` but a task is still running, then the worker will be deleted. This option only apply to the newly created workers. - Default: `SOFT` + Default: `KillBehaviors.SOFT` ## General guidance @@ -205,7 +213,7 @@ We already have a bench folder 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](https://nodejs.org/en/docs/guides/dont-block-the-event-loop/#what-code-runs-on-the-worker-pool). -Now **if your task runs on libuv thread pool**, you can try to: +**If your task runs on libuv thread pool**, you can try to: - Tune the libuv thread pool size setting the [UV_THREADPOOL_SIZE](https://nodejs.org/api/cli.html#cli_uv_threadpool_size_size) @@ -236,7 +244,7 @@ But in general, **always profile your application** ## Contribute See guidelines [CONTRIBUTING](CONTRIBUTING.md) -Choose your task here [2.0.0](https://github.com/pioardi/poolifier/projects/1), propose an idea, a fix, an improvement. +Choose your task here [2.0.0](https://github.com/poolifier/poolifier/projects/1), propose an idea, a fix, an improvement. ## Team