refactor: switch Date.now() -> performance.now() where appropriate
[poolifier.git] / src / pools / selection-strategies / abstract-worker-choice-strategy.ts
1 import type { IPoolInternal } from '../pool-internal'
2 import { PoolType } from '../pool-internal'
3 import type { IPoolWorker } from '../pool-worker'
4 import type {
5 IWorkerChoiceStrategy,
6 RequiredStatistics
7 } from './selection-strategies-types'
8
9 /**
10 * Worker choice strategy abstract base class.
11 *
12 * @typeParam Worker - Type of worker which manages the strategy.
13 * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
14 * @typeParam Response - Type of response of execution. This can only be serializable data.
15 */
16 export abstract class AbstractWorkerChoiceStrategy<
17 Worker extends IPoolWorker,
18 Data = unknown,
19 Response = unknown
20 > implements IWorkerChoiceStrategy {
21 /** @inheritDoc */
22 protected readonly isDynamicPool: boolean
23 /** @inheritDoc */
24 public requiredStatistics: RequiredStatistics = {
25 runTime: false,
26 avgRunTime: false,
27 medRunTime: false
28 }
29
30 /**
31 * Constructs a worker choice strategy bound to the pool.
32 *
33 * @param pool - The pool instance.
34 */
35 public constructor (
36 protected readonly pool: IPoolInternal<Worker, Data, Response>
37 ) {
38 this.isDynamicPool = this.pool.type === PoolType.DYNAMIC
39 this.choose.bind(this)
40 }
41
42 /** @inheritDoc */
43 public abstract reset (): boolean
44
45 /** @inheritDoc */
46 public abstract choose (): number
47
48 /** @inheritDoc */
49 public abstract remove (workerKey: number): boolean
50 }