perf: avoid branching on pool type
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Dec 2023 21:30:32 +0000 (22:30 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Dec 2023 21:30:32 +0000 (22:30 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/circular-array.ts
src/pools/abstract-pool.ts
src/pools/cluster/dynamic.ts
src/pools/cluster/fixed.ts
src/pools/thread/dynamic.ts
src/pools/thread/fixed.ts
src/pools/utils.ts

index 8f545179ab2a90feb3d06fec15ee038552a25221..cc58d8ace71f01f721d1798924b83d359ddc1dec 100644 (file)
@@ -5,6 +5,7 @@ export const DEFAULT_CIRCULAR_ARRAY_SIZE = 1024
 /**
  * Array with a maximum length and shifting items when full.
  *
+ * @typeParam T - Type of items.
  * @internal
  */
 export class CircularArray<T> extends Array<T> {
index 9045b063675a7071d77097ae51d3aa4d7bb9cfcb..617d0d8b9521103f51ed7ea62b08a18015d3ee16 100644 (file)
@@ -1178,9 +1178,7 @@ export abstract class AbstractPool<
    *
    * @returns Whether to create a dynamic worker or not.
    */
-  private shallCreateDynamicWorker (): boolean {
-    return this.type === PoolTypes.dynamic && !this.full && this.internalBusy()
-  }
+  protected abstract shallCreateDynamicWorker (): boolean
 
   /**
    * Sends a message to worker given its worker node key.
index 9636b423915fc670c9b42f24680cee131f343c3a..ce28e421544131e2f3b5efbf762e66b1c8b71103 100644 (file)
@@ -38,6 +38,11 @@ export class DynamicClusterPool<
     )
   }
 
+  /** @inheritDoc */
+  protected shallCreateDynamicWorker (): boolean {
+    return !this.full && this.internalBusy()
+  }
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.dynamic
index 545238b0136fc5f0b1ae8d4c43710a302d087f8d..b7bf9c1a70bb150d98414571c0820752a8707c9a 100644 (file)
@@ -89,6 +89,11 @@ export class FixedClusterPool<
     this.workerNodes[workerNodeKey].worker.off('message', listener)
   }
 
+  /** @inheritDoc */
+  protected shallCreateDynamicWorker (): boolean {
+    return false
+  }
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.fixed
index cd9d23253a040f44070da2fe0b0504da31aeb283..cf317ca2db497c66ed303184dcc6747237574af6 100644 (file)
@@ -38,6 +38,11 @@ export class DynamicThreadPool<
     )
   }
 
+  /** @inheritDoc */
+  protected shallCreateDynamicWorker (): boolean {
+    return !this.full && this.internalBusy()
+  }
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.dynamic
index 13df2b5c602372fdde184989c84e8b3980aad8cf..088d72c920092cb8637b5f86edbdedf62432f672 100644 (file)
@@ -108,6 +108,11 @@ export class FixedThreadPool<
     )
   }
 
+  /** @inheritDoc */
+  protected shallCreateDynamicWorker (): boolean {
+    return false
+  }
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.fixed
index c7ab2d1e664894bbfba218103ee9d85b15e8b0e8..619e2061f382cd82e8b30666149fd4ef11578045 100644 (file)
@@ -164,7 +164,6 @@ export const checkWorkerNodeArguments = (
  * @param measurementStatistics - The measurement statistics to update.
  * @param measurementRequirements - The measurement statistics requirements.
  * @param measurementValue - The measurement value.
- * @param numberOfMeasurements - The number of measurements.
  * @internal
  */
 const updateMeasurementStatistics = (