Commit | Line | Data |
---|---|---|
bdaf31cd JB |
1 | import type { AbstractPoolWorker } from '../abstract-pool-worker' |
2 | ||
3 | /** | |
4 | * Enumeration of worker choice strategies. | |
5 | */ | |
6 | export const WorkerChoiceStrategies = Object.freeze({ | |
7 | /** | |
8 | * Round robin worker selection strategy. | |
9 | */ | |
10 | ROUND_ROBIN: 'ROUND_ROBIN', | |
11 | /** | |
12 | * Less recently used worker selection strategy. | |
13 | */ | |
b3432a63 | 14 | LESS_RECENTLY_USED: 'LESS_RECENTLY_USED', |
23ff945a JB |
15 | /** |
16 | * Fair share worker selection strategy. | |
17 | */ | |
18 | FAIR_SHARE: 'FAIR_SHARE', | |
b3432a63 JB |
19 | /** |
20 | * Weighted round robin worker selection strategy. | |
21 | */ | |
22 | WEIGHTED_ROUND_ROBIN: 'WEIGHTED_ROUND_ROBIN' | |
bdaf31cd JB |
23 | } as const) |
24 | ||
25 | /** | |
26 | * Worker choice strategy. | |
27 | */ | |
28 | export type WorkerChoiceStrategy = keyof typeof WorkerChoiceStrategies | |
29 | ||
30 | /** | |
31 | * Worker choice strategy interface. | |
32 | * | |
33 | * @template Worker Type of worker which manages the strategy. | |
34 | */ | |
35 | export interface IWorkerChoiceStrategy<Worker extends AbstractPoolWorker> { | |
36 | /** | |
37 | * Is the pool attached to the strategy dynamic?. | |
38 | */ | |
39 | isDynamicPool: boolean | |
40 | /** | |
41 | * Choose a worker in the pool. | |
42 | */ | |
43 | choose(): Worker | |
44 | } |