docs: document availableParallelism() usage
authorJérôme Benoit <jerome.benoit@sap.com>
Sat, 1 Jul 2023 10:28:17 +0000 (12:28 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sat, 1 Jul 2023 10:28:17 +0000 (12:28 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
CHANGELOG.md
README.md
examples/dynamicExample.js
examples/fixedExample.js
examples/multiFunctionExample.js
examples/typescript/pool.ts
tests/utils.test.js

index 9a6fb3863e576b2eb229a6fbc4232598c9d6318b..91cf115fa07e0e8ab8442a204ea73545d74ac727 100644 (file)
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+### Added
+
+- Add safe helper `availableParallelism` to help sizing the pool.
+
 ### Fixed
 
 - Ensure message handler is only registered in worker.
index ee40061d62060a17159ce4a3bf2953adb956db61..53ea832dffd985bd05f8d714370be03c994e71f7 100644 (file)
--- a/README.md
+++ b/README.md
@@ -114,10 +114,10 @@ Instantiate your pool based on your needs :
 
 ```js
 'use strict'
-const { DynamicThreadPool, FixedThreadPool, PoolEvents } = require('poolifier')
+const { DynamicThreadPool, FixedThreadPool, PoolEvents, availableParallelism } = require('poolifier')
 
 // a fixed worker-threads pool
-const pool = new FixedThreadPool(15, './yourWorker.js', {
+const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', {
   errorHandler: e => console.error(e),
   onlineHandler: () => console.info('worker is online')
 })
@@ -125,7 +125,7 @@ const pool = new FixedThreadPool(15, './yourWorker.js', {
 pool.emitter.on(PoolEvents.busy, () => console.info('Pool is busy'))
 
 // or a dynamic worker-threads pool
-const pool = new DynamicThreadPool(10, 100, './yourWorker.js', {
+const pool = new DynamicThreadPool(availableParallelism() / 2, availableParallelism(), './yourWorker.js', {
   errorHandler: e => console.error(e),
   onlineHandler: () => console.info('worker is online')
 })
index 59d992a67e202387d2b3dec6e6b6538e326a9985..6af045601025e3edac7c95a0b670b85b9c37f1f3 100644 (file)
@@ -1,14 +1,24 @@
-const { DynamicThreadPool, PoolEvents } = require('poolifier')
-let resolved = 0
+const {
+  DynamicThreadPool,
+  PoolEvents,
+  availableParallelism
+} = require('poolifier')
+
+const pool = new DynamicThreadPool(
+  availableParallelism() / 2,
+  availableParallelism(),
+  './yourWorker.js',
+  {
+    errorHandler: e => console.error(e),
+    onlineHandler: () => console.info('worker is online')
+  }
+)
 let poolFull = 0
 let poolBusy = 0
-const pool = new DynamicThreadPool(10, 20, './yourWorker.js', {
-  errorHandler: e => console.error(e),
-  onlineHandler: () => console.info('worker is online')
-})
 pool.emitter.on(PoolEvents.full, () => poolFull++)
 pool.emitter.on(PoolEvents.busy, () => poolBusy++)
 
+let resolved = 0
 const start = performance.now()
 const iterations = 1000
 for (let i = 1; i <= iterations; i++) {
index 478c37eb056229360dbdbabcf61ab13e7f058e74..2346f7b4f0b68b207ced0df9ffd86f125e36a1e5 100644 (file)
@@ -1,12 +1,17 @@
-const { FixedThreadPool, PoolEvents } = require('poolifier')
-let resolved = 0
-let poolBusy = 0
-const pool = new FixedThreadPool(15, './yourWorker.js', {
+const {
+  FixedThreadPool,
+  PoolEvents,
+  availableParallelism
+} = require('poolifier')
+
+const pool = new FixedThreadPool(availableParallelism(), './yourWorker.js', {
   errorHandler: e => console.error(e),
   onlineHandler: () => console.info('worker is online')
 })
+let poolBusy = 0
 pool.emitter.on(PoolEvents.busy, () => poolBusy++)
 
+let resolved = 0
 const start = performance.now()
 const iterations = 1000
 for (let i = 1; i <= iterations; i++) {
index 055f143fdafae8ee1eb82e65f161d0f69f6b2e4e..829ba93d4c59e852f872a47c6d5dbaa9dc4c5597 100644 (file)
@@ -1,8 +1,13 @@
-const { FixedThreadPool } = require('poolifier')
-const pool = new FixedThreadPool(15, './multiFunctionWorker.js', {
-  errorHandler: e => console.error(e),
-  onlineHandler: () => console.info('worker is online')
-})
+const { FixedThreadPool, availableParallelism } = require('poolifier')
+
+const pool = new FixedThreadPool(
+  availableParallelism(),
+  './multiFunctionWorker.js',
+  {
+    errorHandler: e => console.error(e),
+    onlineHandler: () => console.info('worker is online')
+  }
+)
 
 pool
   .execute({ text: 'hello' }, 'fn0')
index 869e62a8bf718020c155ae221b85921735a61d74..b6bb4da3427a93132842e5953cd6fa858d52408d 100644 (file)
@@ -1,9 +1,13 @@
 import { join } from 'path'
 import type { MyData, MyResponse } from './worker'
-import { DynamicThreadPool, FixedThreadPool } from 'poolifier'
+import {
+  DynamicThreadPool,
+  FixedThreadPool,
+  availableParallelism
+} from 'poolifier'
 
 export const fixedPool = new FixedThreadPool<MyData, Promise<MyResponse>>(
-  8,
+  availableParallelism(),
   join(__dirname, 'worker.js'),
   {
     errorHandler: (e: Error) => {
@@ -16,8 +20,8 @@ export const fixedPool = new FixedThreadPool<MyData, Promise<MyResponse>>(
 )
 
 export const dynamicPool = new DynamicThreadPool<MyData, Promise<MyResponse>>(
-  2,
-  8,
+  availableParallelism() / 2,
+  availableParallelism(),
   join(__dirname, 'worker.js'),
   {
     errorHandler: (e: Error) => {
index b1a91776a61ac63abefb10eea11ee11f19c1b29d..f62d49c68af0a9a3a187cbf06d7899b7685cc829 100644 (file)
@@ -1,5 +1,5 @@
 const { expect } = require('expect')
-const { isPlainObject, median } = require('../lib/utils')
+const { isPlainObject, median, availableParallelism } = require('../lib/utils')
 const {
   isKillBehavior,
   KillBehaviors
@@ -60,4 +60,8 @@ describe('Utils test suite', () => {
     expect(isKillBehavior(KillBehaviors.HARD, null)).toBe(false)
     expect(isKillBehavior(KillBehaviors.SOFT, 'unknown')).toBe(false)
   })
+
+  it('Verify availableParallelism() behavior', () => {
+    expect(typeof availableParallelism() === 'number').toBe(true)
+  })
 })