X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=README.md;h=07ca907620135eef6ed4d7124ec7a7df69704cf0;hb=HEAD;hp=0b87512cb01a16da6adad528f8dc0a4279f893c0;hpb=b80f8e9e07f10b4072587018fccb6784e3380f6c;p=poolifier.git diff --git a/README.md b/README.md index 0b87512c..43bc095f 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,17 @@
[![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) -[![Actions Status](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) +[![Npm Version](https://badgen.net/npm/v/poolifier?icon=npm)](https://www.npmjs.com/package/poolifier) +[![Npm Weekly Downloads](https://badgen.net/npm/dw/poolifier?icon=npm)](https://www.npmjs.com/package/poolifier) +[![JSR Version](https://jsr.io/badges/@poolifier/poolifier)](https://jsr.io/@poolifier/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=poolifier_poolifier&metric=coverage)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) +[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=alert_status)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) [![Javascript Standard Style Guide]()](https://standardjs.com) -[![Discord](https://badgen.net/discord/online-members/85VrP8m8?icon=discord&label=discord&color=green)](https://discord.gg/85VrP8m8) +[![Discord](https://badgen.net/discord/online-members/vXxZhyb3b6?icon=discord&label=discord&color=green)](https://discord.gg/vXxZhyb3b6) [![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]()]() +[![PRs Welcome](https://badgen.net/static/PRs/welcome/green)](https://makeapullrequest.com) +[![No Dependencies]()]()
@@ -36,28 +38,28 @@ Please consult our [general guidelines](#general-guidelines). - Performance [benchmarks](./benchmarks/README.md) :white_check_mark: - No runtime dependencies :white_check_mark: - Proper integration with Node.js [async_hooks](https://nodejs.org/api/async_hooks.html) :white_check_mark: -- Support for CommonJS, ESM, and TypeScript :white_check_mark: +- 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](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 idle :white_check_mark: - Tasks stealing under back pressure :white_check_mark: - Tasks redistribution on worker error :white_check_mark: +- Support for sync and async task function :white_check_mark: +- Support for multiple task functions with per task function queuing priority and tasks distribution strategy :white_check_mark: +- Support for task functions [CRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) operations at runtime :white_check_mark: - General guidelines on pool choice :white_check_mark: - Error handling out of the box :white_check_mark: - Widely tested :white_check_mark: - Active community :white_check_mark: -- 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) +- Code quality [![Bugs](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=bugs)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) + [![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=code_smells)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) + [![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) + [![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=sqale_rating)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) + [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=reliability_rating)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) + [![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=sqale_index)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) +- Code security [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=security_rating)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=poolifier_poolifier&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=poolifier_poolifier) ## Table of contents @@ -81,17 +83,24 @@ You have to implement your worker by extending the _ThreadWorker_ or _ClusterWor ## Installation +### npmjs + ```shell npm install poolifier --save ``` +### JSR + +```shell +npx jsr add @poolifier/poolifier +``` + ## Usage -You can implement a [worker_threads](https://nodejs.org/api/worker_threads.html#class-worker) worker in a simple way by extending the class _ThreadWorker_: +You can implement a poolifier [worker_threads](https://nodejs.org/api/worker_threads.html#class-worker) worker in a simple way by extending the class _ThreadWorker_: ```js -'use strict' -const { ThreadWorker } = require('poolifier') +import { ThreadWorker } from 'poolifier' function yourFunction(data) { // this will be executed in the worker thread, @@ -107,36 +116,35 @@ module.exports = new ThreadWorker(yourFunction, { Instantiate your pool based on your needs : ```js -'use strict' -const { DynamicThreadPool, FixedThreadPool, PoolEvents, availableParallelism } = require('poolifier') +import { DynamicThreadPool, FixedThreadPool, PoolEvents, availableParallelism } from 'poolifier' // a fixed worker_threads pool const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', { - errorHandler: (e) => console.error(e), - onlineHandler: () => console.info('worker is online') + onlineHandler: () => console.info('worker is online'), + errorHandler: e => console.error(e) }) -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', { - errorHandler: (e) => console.error(e), - onlineHandler: () => console.info('worker is online') + onlineHandler: () => console.info('worker is online'), + errorHandler: e => console.error(e) }) -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 pool .execute() - .then((res) => { + .then(res => { console.info(res) }) - .catch((err) => { + .catch(err => { console.error(err) }) ``` @@ -165,7 +173,7 @@ Remember that workers can only send and receive structured-cloneable data. ## Node.js versions -Node.js versions >= 16.14.x are supported. +Node.js versions >= 18.x.x are supported. ## [API](./docs/api.md)