perf: alternate worker selection between start and end of worker nodes
[poolifier.git] / src / pools / abstract-pool.ts
index 4c78c28f1479f7988e10a9096710e1ec2e94c7cb..67a22ffe04898f590ab70669a9d49934d6f90ad6 100644 (file)
@@ -306,6 +306,20 @@ export abstract class AbstractPool<
     })
   }
 
+  /** @inheritDoc */
+  public findLastFreeWorkerNodeKey (): number {
+    // It requires node >= 18.0.0
+    // return this.workerNodes.findLastIndex(workerNode => {
+    //   return workerNode.tasksUsage?.running === 0
+    // })
+    for (let i = this.workerNodes.length - 1; i >= 0; i--) {
+      if (this.workerNodes[i].tasksUsage?.running === 0) {
+        return i
+      }
+    }
+    return -1
+  }
+
   /** @inheritDoc */
   public async execute (data?: Data): Promise<Response> {
     const [workerNodeKey, workerNode] = this.chooseWorkerNode()