<img src="./images/logo.png" width="340px" height="266px"/>
</div>
-<h1 align="center">Node.js Worker_Threads and Cluster Worker Pool</h1>
+<div align="center">
+
+# Node.js Worker_Threads and Cluster Worker Pool
+
+</div>
<div align="center">
- <a href="https://github.com/poolifier/poolifier/graphs/commit-activity">
- <img alt="GitHub commit activity (master)" src="https://img.shields.io/github/commit-activity/m/poolifier/poolifier/master?color=brightgreen"></a>
- <a href="https://www.npmjs.com/package/poolifier">
- <img alt="Weekly Downloads" src="https://badgen.net/npm/dw/poolifier"></a>
- <a href="https://github.com/poolifier/poolifier/actions/workflows/ci.yml">
- <img alt="Actions Status" src="https://github.com/poolifier/poolifier/actions/workflows/ci.yml/badge.svg"></a>
- <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
- <img alt="Code Coverage" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=coverage"></a>
- <a href="https://sonarcloud.io/dashboard?id=pioardi_poolifier">
- <img alt="Quality Gate Status" src="https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=alert_status"></a>
- <a href="https://standardjs.com">
- <img alt="Javascript Standard Style Guide" src="https://badgen.net/static/code style/standard/green"></a>
- <a href="https://discord.gg/85VrP8m8">
- <img alt="Discord" src="https://badgen.net/discord/online-members/85VrP8m8?icon=discord&label=discord&color=green"></a>
- <a href="https://opencollective.com/poolifier">
- <img alt="Open Collective" src="https://opencollective.com/poolifier/tiers/badge.svg"></a>
- <a href="http://makeapullrequest.com">
- <img alt="PRs welcome" src="https://badgen.net/static/PRs/welcome/green"></a>
- <a href="https://badgen.net/static/code style/standard/green">
- <img alt="No dependencies" src="https://badgen.net/static/dependencies/no dependencies/green"></a>
+
+[![GitHub commit activity (master)](https://img.shields.io/github/commit-activity/m/poolifier/poolifier/master?color=brightgreen&logo=github)](https://github.com/poolifier/poolifier/graphs/commit-activity)
+[![Weekly Downloads](https://badgen.net/npm/dw/poolifier?icon=npm)](https://www.npmjs.com/package/poolifier)
+[![CI Workflow](https://github.com/poolifier/poolifier/actions/workflows/ci.yml/badge.svg)](https://github.com/poolifier/poolifier/actions/workflows/ci.yml)
+[![Code Coverage](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=coverage)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
+[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=pioardi_poolifier&metric=alert_status)](https://sonarcloud.io/dashboard?id=pioardi_poolifier)
+[![Javascript Standard Style Guide](<https://badgen.net/static/code style/standard/green>)](https://standardjs.com)
+[![Discord](https://badgen.net/discord/online-members/85VrP8m8?icon=discord&label=discord&color=green)](https://discord.gg/85VrP8m8)
+[![Open Collective](https://opencollective.com/poolifier/tiers/badge.svg)](https://opencollective.com/poolifier)
+[![PRs Welcome](https://badgen.net/static/PRs/welcome/green)](http://makeapullrequest.com)
+[![No Dependencies](<https://badgen.net/static/dependencies/no dependencies/green>)](<https://badgen.net/static/dependencies/no dependencies/green>)
+
</div>
## Why Poolifier?
- Support for CommonJS, ESM, and TypeScript :white_check_mark:
- Support for [worker_threads](https://nodejs.org/api/worker_threads.html) and [cluster](https://nodejs.org/api/cluster.html) Node.js modules :white_check_mark:
- Support for multiple task functions :white_check_mark:
-- Support for task functions CRUD operations at runtime :white_check_mark:
+- Support for task functions [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations at runtime :white_check_mark:
- Support for sync and async task functions :white_check_mark:
- Tasks distribution strategies :white_check_mark:
- Lockless tasks queueing :white_check_mark:
- Queued tasks rescheduling:
- - Task stealing :white_check_mark:
+ - Task stealing on empty queue :white_check_mark:
- Tasks stealing under back pressure :white_check_mark:
- Tasks redistribution on worker error :white_check_mark:
- General guidelines on pool choice :white_check_mark:
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'))
+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
const pool = new DynamicThreadPool(Math.floor(availableParallelism() / 2), availableParallelism(), './yourWorker.js', {
onlineHandler: () => console.info('worker is online')
})
-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'))
+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,
// so you can easily switch from one to another