Moreover you can execute your tasks using an API designed to improve the **developer experience**.
Please consult our [general guidelines](#general-guidance).
-- Performance :racehorse: [benchmarks](./benchmarks/README.md)
-- Security :bank: :cop: [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=security_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
-- Easy to use :couple:
+- Easy to use :white_check_mark:
+- Performance [benchmarks](./benchmarks/README.md) :white_check_mark:
- Dynamic pool size :white_check_mark:
- Easy switch from a pool to another :white_check_mark:
- No runtime dependencies :white_check_mark:
- Proper async integration with node async hooks :white_check_mark:
-- Support for worker threads and cluster node modules :white_check_mark:
+- Support CommonJS, ESM, and TypeScript :white_check_mark:
+- Support for worker-threads and cluster node modules :white_check_mark:
- Support sync and async tasks :white_check_mark:
- Tasks distribution strategies :white_check_mark:
-- General guidance on pools to use :white_check_mark:
+- General guidance on pool choice :white_check_mark:
- Widely tested :white_check_mark:
- Error handling out of the box :white_check_mark:
- Active community :white_check_mark:
-- Code quality :octocat: [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=bugs)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
+- Code quality [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=bugs)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=code_smells)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=sqale_index)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
+- Code security [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=security_rating)](https://sonarcloud.io/dashboard?id=pioardi_poolifier) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
## Contents
const { DynamicThreadPool, FixedThreadPool, PoolEvents } = require('poolifier')
// a fixed worker-threads pool
-const pool = new FixedThreadPool(15,
- './yourWorker.js',
- { errorHandler: (e) => console.error(e), onlineHandler: () => console.log('worker is online') })
+const pool = new FixedThreadPool(15, './yourWorker.js', {
+ errorHandler: e => console.error(e),
+ onlineHandler: () => console.info('worker is online')
+})
-pool.emitter.on(PoolEvents.busy, () => console.log('Pool is busy'))
+pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
// or a dynamic worker-threads pool
-const pool = new DynamicThreadPool(10, 100,
- './yourWorker.js',
- { errorHandler: (e) => console.error(e), onlineHandler: () => console.log('worker is online') })
+const pool = new DynamicThreadPool(10, 100, './yourWorker.js', {
+ errorHandler: e => console.error(e),
+ onlineHandler: () => console.info('worker is online')
+})
-pool.emitter.on(PoolEvents.full, () => console.log('Pool is full'))
-pool.emitter.on(PoolEvents.busy, () => console.log('Pool is busy'))
+pool.emitter.on(PoolEvents.full, () => console.info('Pool is full'))
+pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
// the execute method signature is the same for both implementations,
// so you can easy switch from one to another
-pool.execute({}).then(res => {
- console.log(res)
-}).catch ....
-
+pool
+ .execute({})
+ .then(res => {
+ console.info(res)
+ })
+ .catch(err => {
+ console.error(err)
+ })
```
You can do the same with the classes ClusterWorker, FixedClusterPool and DynamicClusterPool.
-**See examples folder for more details (in particular if you want to use a pool with [multiple worker functions](./examples/multiFunctionExample.js))**.
+**See [examples](./examples/) folder for more details (in particular if you want to use a pool with [multiple worker functions](./examples/multiFunctionExample.js))**.
-Remember that workers can only send and receive serializable data.
+Remember that workers can only send and receive structured-cloneable data.
## Node versions
Default: `60000`
- `killBehavior` (optional) - Dictates if your async unit (worker/process) will be deleted in case that a task is active on it.
- **KillBehaviors.SOFT**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker **won't** be deleted.
- **KillBehaviors.HARD**: If `currentTime - lastActiveTime` is greater than `maxInactiveTime` but a task is still executing, then the worker will be deleted.
+ **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`
## Contribute
-Choose your task here [2.5.x](https://github.com/orgs/poolifier/projects/1), propose an idea, a fix, an improvement.
+Choose your task here [2.6.x](https://github.com/orgs/poolifier/projects/1), propose an idea, a fix, an improvement.
See [CONTRIBUTING](CONTRIBUTING.md) guidelines.
## Team
-<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
-
**Creator/Owner:**
- [**Alessandro Pio Ardizio**](https://github.com/pioardi)