Add fair sharing worker choice strategy
[poolifier.git] / src / pools / selection-strategies / selection-strategies-types.ts
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 */
14 LESS_RECENTLY_USED: 'LESS_RECENTLY_USED',
15 /**
16 * Fair share worker selection strategy.
17 */
18 FAIR_SHARE: 'FAIR_SHARE',
19 /**
20 * Weighted round robin worker selection strategy.
21 */
22 WEIGHTED_ROUND_ROBIN: 'WEIGHTED_ROUND_ROBIN'
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 }