71120110f75bfb48c6e005876b8b7715e53f53fb
1 import EventEmitter from
'events'
2 import type { AbstractPoolWorker
} from
'./abstract-pool-worker'
3 import type { IPool
} from
'./pool'
14 * Internal poolifier pool emitter.
16 export class PoolEmitter
extends EventEmitter
{}
19 * Internal contract definition for a poolifier pool.
21 * @template Worker Type of worker which manages this pool.
22 * @template Data Type of data sent to the worker.
23 * @template Response Type of response of execution.
25 export interface IPoolInternal
<
26 Worker
extends AbstractPoolWorker
,
29 > extends IPool
<Data
, Response
> {
31 * List of currently available workers.
33 readonly workers
: Worker
[]
38 * - `key`: The `Worker`
39 * - `value`: Number of tasks currently in progress on the worker.
41 readonly tasks
: Map
<Worker
, number>
44 * Emitter on which events can be listened to.
46 * Events that can currently be listened to:
50 readonly emitter
?: PoolEmitter
55 * If it is `'dynamic'`, it provides the `max` property.
57 readonly type: PoolType
60 * Maximum number of workers that can be created by this pool.
65 * Whether the pool is busy or not.
67 * The pool busyness boolean status.
69 readonly busy
: boolean
72 * Number of tasks currently concurrently running.
74 readonly numberOfRunningTasks
: number
77 * Find a free worker based on the number of tasks the worker has applied.
79 * If a worker is found with `0` running tasks, it is detected as free and returned.
81 * If no free worker is found, `false` is returned.
83 * @returns A free worker if there is one, otherwise `false`.
85 findFreeWorker(): Worker
| false
90 * @param worker The worker.
91 * @returns The worker index.
93 getWorkerIndex(worker
: Worker
): number
96 * Get worker running tasks.
98 * @param worker The worker.
99 * @returns The number of tasks currently running on the worker.
101 getWorkerRunningTasks(worker
: Worker
): number | undefined