Commit | Line | Data |
---|---|---|
bdaf31cd JB |
1 | import type { IPoolInternal } from '../pool-internal' |
2 | import { PoolType } from '../pool-internal' | |
ea7a90d3 | 3 | import type { IPoolWorker } from '../pool-worker' |
10fcfaf4 JB |
4 | import type { |
5 | IWorkerChoiceStrategy, | |
6 | RequiredStatistics | |
7 | } from './selection-strategies-types' | |
bdaf31cd JB |
8 | |
9 | /** | |
9cd39dd4 | 10 | * Worker choice strategy abstract base class. |
bdaf31cd | 11 | * |
38e795c1 JB |
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. | |
bdaf31cd JB |
15 | */ |
16 | export abstract class AbstractWorkerChoiceStrategy< | |
ea7a90d3 | 17 | Worker extends IPoolWorker, |
b2b1d84e JB |
18 | Data = unknown, |
19 | Response = unknown | |
3300e7bc | 20 | > implements IWorkerChoiceStrategy<Worker, Data, Response> { |
afc003b2 | 21 | /** @inheritDoc */ |
b8f3418c | 22 | public readonly isDynamicPool: boolean |
afc003b2 | 23 | /** @inheritDoc */ |
10fcfaf4 | 24 | public requiredStatistics: RequiredStatistics = { |
c6bd2650 JB |
25 | runTime: false, |
26 | avgRunTime: false | |
10fcfaf4 | 27 | } |
bdaf31cd JB |
28 | |
29 | /** | |
6533c3e6 | 30 | * Constructs a worker choice strategy bound to the pool. |
bdaf31cd | 31 | * |
38e795c1 | 32 | * @param pool - The pool instance. |
bdaf31cd JB |
33 | */ |
34 | public constructor ( | |
3300e7bc | 35 | public readonly pool: IPoolInternal<Worker, Data, Response> |
b8f3418c JB |
36 | ) { |
37 | this.isDynamicPool = this.pool.type === PoolType.DYNAMIC | |
1086026a | 38 | this.choose.bind(this) |
b8f3418c | 39 | } |
bdaf31cd | 40 | |
afc003b2 | 41 | /** @inheritDoc */ |
a6f7f1b4 | 42 | public abstract reset (): boolean |
ea7a90d3 | 43 | |
afc003b2 | 44 | /** @inheritDoc */ |
c923ce56 | 45 | public abstract choose (): number |
97a2abc3 | 46 | |
afc003b2 | 47 | /** @inheritDoc */ |
97a2abc3 | 48 | public abstract remove (workerKey: number): boolean |
bdaf31cd | 49 | } |