refactor: remove unneeded encapsulation around tasks usage handling
[poolifier.git] / src / pools / selection-strategies / less-recently-used-worker-choice-strategy.ts
index 342ca6ebf10fd46274b8f2a78deecd3f1c81be2b..fc64a74a6bc7e2085b7e623b5ddc222825d019da 100644 (file)
@@ -4,34 +4,35 @@ import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy'
 /**
  * Selects the less recently used worker.
  *
- * @template Worker Type of worker which manages the strategy.
- * @template Data Type of data sent to the worker. This can only be serializable data.
- * @template Response Type of response of execution. This can only be serializable data.
+ * @typeParam Worker - Type of worker which manages the strategy.
+ * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
+ * @typeParam Response - Type of response of execution. This can only be serializable data.
  */
 export class LessRecentlyUsedWorkerChoiceStrategy<
   Worker extends IPoolWorker,
   Data,
   Response
 > extends AbstractWorkerChoiceStrategy<Worker, Data, Response> {
-  /** @inheritDoc */
+  /** {@inheritDoc} */
   public reset (): boolean {
     return true
   }
 
-  /** @inheritDoc */
+  /** {@inheritDoc} */
   public choose (): Worker {
-    let minNumberOfRunningTasks = Infinity
+    let minNumberOfTasks = Infinity
     // A worker is always found because it picks the one with fewer tasks
     let lessRecentlyUsedWorker!: Worker
-    for (const worker of this.pool.workers) {
-      const workerRunningTasks = this.pool.getWorkerRunningTasks(
-        worker
-      ) as number
-      if (this.isDynamicPool === false && workerRunningTasks === 0) {
+    for (const value of this.pool.workers.values()) {
+      const worker = value.worker
+      const tasksUsage = this.pool.getWorkerTasksUsage(worker)
+      const workerTasks =
+        (tasksUsage?.run as number) + (tasksUsage?.running as number)
+      if (!this.isDynamicPool && workerTasks === 0) {
         return worker
-      } else if (workerRunningTasks < minNumberOfRunningTasks) {
+      } else if (workerTasks < minNumberOfTasks) {
+        minNumberOfTasks = workerTasks
         lessRecentlyUsedWorker = worker
-        minNumberOfRunningTasks = workerRunningTasks
       }
     }
     return lessRecentlyUsedWorker