]> Piment Noir Git Repositories - poolifier.git/commitdiff
perf: add adaptive aging factor to priority queue
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Aug 2025 19:39:33 +0000 (21:39 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Aug 2025 19:39:33 +0000 (21:39 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/queues/fixed-priority-queue.ts

index 509b1ad43259da16e8cce6e35f19fc01a2ef4e36..fa4b025742435d6ec12e83770d0546905139baf2 100644 (file)
@@ -30,16 +30,19 @@ export class FixedPriorityQueue<T>
     }
     priority = priority ?? 0
     const now = performance.now()
+    const effectiveAgingFactor =
+      this.agingFactor * (1 + 2 * (this.size / this.capacity))
     let insertionPhysicalIndex = -1
     let currentPhysicalIndex = this.start
     for (let i = 0; i < this.size; i++) {
-      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-      const node = this.nodeArray[currentPhysicalIndex]!
-      const nodeEffectivePriority =
-        node.priority - (now - node.timestamp) * this.agingFactor
-      if (nodeEffectivePriority > priority) {
-        insertionPhysicalIndex = currentPhysicalIndex
-        break
+      const node = this.nodeArray[currentPhysicalIndex]
+      if (node != null) {
+        const nodeEffectivePriority =
+          node.priority - (now - node.timestamp) * effectiveAgingFactor
+        if (nodeEffectivePriority > priority) {
+          insertionPhysicalIndex = currentPhysicalIndex
+          break
+        }
       }
       ++currentPhysicalIndex
       if (currentPhysicalIndex === this.capacity) {