perf: use worker key as much as possible instead of a reference to the
[poolifier.git] / src / pools / selection-strategies / selection-strategies-utils.ts
index 4c0fea61ef05a4ebb398a396c580bfe9d0afa084..10c93335ea98cd1c3b019addb88603ed2749672e 100644 (file)
@@ -1,7 +1,8 @@
 import type { IPoolInternal } from '../pool-internal'
 import type { IPoolWorker } from '../pool-worker'
 import { FairShareWorkerChoiceStrategy } from './fair-share-worker-choice-strategy'
-import { LessRecentlyUsedWorkerChoiceStrategy } from './less-recently-used-worker-choice-strategy'
+import { LessBusyWorkerChoiceStrategy } from './less-busy-worker-choice-strategy'
+import { LessUsedWorkerChoiceStrategy } from './less-used-worker-choice-strategy'
 import { RoundRobinWorkerChoiceStrategy } from './round-robin-worker-choice-strategy'
 import type {
   IWorkerChoiceStrategy,
@@ -24,16 +25,20 @@ export function getWorkerChoiceStrategy<
 > (
   pool: IPoolInternal<Worker, Data, Response>,
   workerChoiceStrategy: WorkerChoiceStrategy = WorkerChoiceStrategies.ROUND_ROBIN
-): IWorkerChoiceStrategy<Worker> {
+): IWorkerChoiceStrategy {
   switch (workerChoiceStrategy) {
     case WorkerChoiceStrategies.ROUND_ROBIN:
-      return new RoundRobinWorkerChoiceStrategy(pool)
-    case WorkerChoiceStrategies.LESS_RECENTLY_USED:
-      return new LessRecentlyUsedWorkerChoiceStrategy(pool)
+      return new RoundRobinWorkerChoiceStrategy<Worker, Data, Response>(pool)
+    case WorkerChoiceStrategies.LESS_USED:
+      return new LessUsedWorkerChoiceStrategy<Worker, Data, Response>(pool)
+    case WorkerChoiceStrategies.LESS_BUSY:
+      return new LessBusyWorkerChoiceStrategy<Worker, Data, Response>(pool)
     case WorkerChoiceStrategies.FAIR_SHARE:
-      return new FairShareWorkerChoiceStrategy(pool)
+      return new FairShareWorkerChoiceStrategy<Worker, Data, Response>(pool)
     case WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN:
-      return new WeightedRoundRobinWorkerChoiceStrategy(pool)
+      return new WeightedRoundRobinWorkerChoiceStrategy<Worker, Data, Response>(
+        pool
+      )
     default:
       throw new Error(
         // eslint-disable-next-line @typescript-eslint/restrict-template-expressions