chore: v2.6.16
[poolifier.git] / README.md
index 91112b67b071406e59e0fc8f04f814fd13e08454..6da73ee0b5347dd9dd7684a408266b9816b29ea6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 
 ## Why Poolifier?
 
-Poolifier is used to perform CPU intensive and I/O intensive tasks on nodejs servers, it implements worker pools 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.  
+Poolifier is used to perform CPU intensive and I/O intensive tasks on nodejs servers, it implements worker pools using [worker-threads](https://nodejs.org/api/worker_threads.html#worker_threads_worker_threads) and cluster pools using [cluster](https://nodejs.org/api/cluster.html) Node.js modules.  
 With poolifier you can improve your **performance** and resolve problems related to the event loop.  
 Moreover you can execute your tasks using an API designed to improve the **developer experience**.  
 Please consult our [general guidelines](#general-guidance).
@@ -122,6 +122,7 @@ const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', {
   onlineHandler: () => console.info('worker is online')
 })
 
+pool.emitter.on(PoolEvents.ready, () => console.info('Pool is ready'))
 pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // or a dynamic worker-threads pool
@@ -131,6 +132,7 @@ const pool = new DynamicThreadPool(Math.floor(availableParallelism() / 2), avail
 })
 
 pool.emitter.on(PoolEvents.full, () => console.info('Pool is full'))
+pool.emitter.on(PoolEvents.ready, () => console.info('Pool is ready'))
 pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // the execute method signature is the same for both implementations,
@@ -229,31 +231,56 @@ An object with these properties:
 ### `pool.execute(data, name)`
 
 `data` (optional) An object that you want to pass to your worker implementation  
-`name` (optional) A string with the task function name that you want to execute on the worker. Default: `'default'`  
-This method is available on both pool implementations and returns a promise.
+`name` (optional) A string with the task function name that you want to execute on the worker. Default: `'default'`
+
+This method is available on both pool implementations and returns a promise with the task function execution response.
 
 ### `pool.destroy()`
 
-Destroy method is available on both pool implementations.  
-This method will call the terminate method on each worker.
+This method is available on both pool implementations and will call the terminate method on each worker.
 
 ### `class YourWorker extends ThreadWorker/ClusterWorker`
 
-`taskFunctions` (mandatory) The task function or task functions object that you want to execute on the worker  
+`taskFunctions` (mandatory) The task function or task functions object `{ name_1: fn_1, ..., name_n: fn_n }` that you want to execute on the worker  
 `opts` (optional) An object with these properties:
 
-- `maxInactiveTime` (optional) - Max time to wait tasks to work on in milliseconds, after this period the new worker will die.  
-  The last active time of your worker unit will be updated when a task is submitted to a worker or when a worker terminate a task.  
+- `maxInactiveTime` (optional) - Maximum waiting time in milliseconds for tasks on newly created workers. After this time newly created workers will die.  
+  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`
 
-- `killBehavior` (optional) - Dictates if your async unit (worker/process) will be deleted in case that a task is active on it.  
+- `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 a task is still executing or queued, then the worker **won't** be deleted.  
   **KillBehaviors.HARD**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing or queued, then the worker will be deleted.  
   This option only apply to the newly created workers.  
   Default: `KillBehaviors.SOFT`
 
+#### `YourWorker.hasTaskFunction(name)`
+
+`name` (mandatory) The task function name
+
+This method is available on both worker implementations and returns a boolean.
+
+#### `YourWorker.addTaskFunction(name, fn)`
+
+`name` (mandatory) The task function name  
+`fn` (mandatory) The task function
+
+This method is available on both worker implementations and returns a boolean.
+
+#### `YourWorker.removeTaskFunction(name)`
+
+`name` (mandatory) The task function name
+
+This method is available on both worker implementations and returns a boolean.
+
+#### `YourWorker.setDefaultTaskFunction(name)`
+
+`name` (mandatory) The task function name
+
+This method is available on both worker implementations and returns a boolean.
+
 ## General guidance
 
 Performance is one of the main target of these worker pool implementations, we want to have a strong focus on this.