exframe Worker Pool
A library for managing a maximum number of concurrent work items locally and scheduling what comes next by priority
installation
npm install exframe-worker-pool
usage
const { WorkerPool } = require('exframe-worker-pool');
const pool = new WorkerPool();
const result = await pool.work(async () => {
return 10;
});
console.log(result); // 10
pool.eventEmitter.on('empty', () => {
return 'pool is empty'; //fires when count === 0
})
class WorkerPool
Manages the set of concurrent work and schedules what comes next by priority
constructor(options?) => WorkerPool
type options
field | type | description |
---|---|---|
max |
integer default = 10 |
the maximum number of concurrent workers that may be executing |
overflow |
integer default = 5 |
the buffer over the maximum concurrent workers reserved for executing with the forced flag -- queued work cannot execute until after the workingCount reduces to less than max |
async take<T>(options?) => Promise<Worker>
Takes a worker resource from the pool, once the calling code is done, it will need to call release
on the worker
type options
field | type | description |
---|---|---|
priority |
integer default = 1 |
the priority assigned to the work -- priority is sorted descending, so something with a higher priority will execute first |
force |
boolean default = false |
flag to indicate that the work can execute within the overflow buffer if max concurrency has been reached |
type Worker
release() => void
Releases the worker resource back to the worker pool
async work<T>(callback: () => Promise<T>, options?) => Promise<T>
Executes the given callback immediately or once the pool has freed enough worker resources to allow the given callback to execute
type options
field | type | description |
---|---|---|
priority |
integer default = 1 |
the priority assigned to the work -- priority is sorted descending, so something with a higher priority will execute first |
force |
boolean default = false |
flag to indicate that the work can execute within the overflow buffer if max concurrency has been reached |
eventEmitter: EventEmitter
Event emitter that exposes the following events
event | parameters | description |
---|---|---|
empty | null | Fires whenever a worker is released and the count is reduced to 0 |
workingCount: number
The number of worker that are currently executing
queuedCount: number
The number of work items waiting to execute
max: number
The maxmium number of concurrent workers
overflow: number
The buffer of work items over the max that can be forced into the pool
fillRatio: number
The ratio of the current working count over the sum of max and overflow
queuedRatio: number
The ratio of the queued count over the sum of max and overflow
<style> .fields table { width: 100%; } .fields table th:first-of-type { width: 75px; } .fields table th:nth-of-type(2) { width: 100px } </style>