1 import type { IPool
} from
'./pool'
2 import type { IPoolWorker
} from
'./pool-worker'
13 * Internal tasks usage statistics.
15 export interface TasksUsage
{
23 * Internal contract definition for a poolifier pool.
25 * @typeParam Worker - Type of worker which manages this pool.
26 * @typeParam Data - Type of data sent to the worker.
27 * @typeParam Response - Type of response of execution.
29 export interface IPoolInternal
<
30 Worker
extends IPoolWorker
,
33 > extends IPool
<Data
, Response
> {
35 * List of currently available workers.
37 readonly workers
: Worker
[]
40 * The workers tasks usage map.
43 * `value`: Worker tasks usage statistics.
45 readonly workersTasksUsage
: Map
<Worker
, TasksUsage
>
50 * If it is `'dynamic'`, it provides the `max` property.
52 readonly type: PoolType
55 * Whether the pool is busy or not.
57 * The pool busyness boolean status.
59 readonly busy
: boolean
62 * Number of tasks currently concurrently running.
64 readonly numberOfRunningTasks
: number
67 * Finds a free worker based on the number of tasks the worker has applied.
69 * If a worker is found with `0` running tasks, it is detected as free and returned.
71 * If no free worker is found, `false` is returned.
73 * @returns A free worker if there is one, otherwise `false`.
75 findFreeWorker
: () => Worker
| false
80 * @param worker - The worker.
81 * @returns The worker index.
83 getWorkerIndex
: (worker
: Worker
) => number
86 * Gets worker running tasks.
88 * @param worker - The worker.
89 * @returns The number of tasks currently running on the worker.
91 getWorkerRunningTasks
: (worker
: Worker
) => number | undefined
94 * Gets worker average tasks runtime.
96 * @param worker - The worker.
97 * @returns The average tasks runtime on the worker.
99 getWorkerAverageTasksRunTime
: (worker
: Worker
) => number | undefined