perf: avoid branching on pool type
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Dec 2023 22:07:13 +0000 (23:07 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 22 Dec 2023 22:07:13 +0000 (23:07 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
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

index 617d0d8b9521103f51ed7ea62b08a18015d3ee16..cfef89e32b568da13e28a5f4fdb77230dccaefb6 100644 (file)
@@ -1727,13 +1727,10 @@ export abstract class AbstractPool<
     }
   }
 
-  private checkAndEmitDynamicWorkerCreationEvents (): void {
-    if (this.type === PoolTypes.dynamic) {
-      if (this.full) {
-        this.emitter?.emit(PoolEvents.full, this.info)
-      }
-    }
-  }
+  /**
+   * Emits dynamic worker creation events.
+   */
+  protected abstract checkAndEmitDynamicWorkerCreationEvents (): void
 
   /**
    * Gets the worker information given its worker node key.
index ce28e421544131e2f3b5efbf762e66b1c8b71103..08ebc75c76a66ba5ca311c2e269988d741ad5aff 100644 (file)
@@ -1,5 +1,5 @@
 import { checkDynamicPoolSize } from '../utils'
-import { type PoolType, PoolTypes } from '../pool'
+import { PoolEvents, type PoolType, PoolTypes } from '../pool'
 import { type ClusterPoolOptions, FixedClusterPool } from './fixed'
 
 /**
@@ -43,6 +43,13 @@ export class DynamicClusterPool<
     return !this.full && this.internalBusy()
   }
 
+  /** @inheritDoc */
+  protected checkAndEmitDynamicWorkerCreationEvents (): void {
+    if (this.full) {
+      this.emitter?.emit(PoolEvents.full, this.info)
+    }
+  }
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.dynamic
index b7bf9c1a70bb150d98414571c0820752a8707c9a..b1930f2f7f5ec59aa509dcaba578d595d5e6aaad 100644 (file)
@@ -94,6 +94,9 @@ export class FixedClusterPool<
     return false
   }
 
+  /** @inheritDoc */
+  protected checkAndEmitDynamicWorkerCreationEvents (): void {}
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.fixed
index cf317ca2db497c66ed303184dcc6747237574af6..d3764c285291407d75b1ee293ece40ebbc8c5dfd 100644 (file)
@@ -1,4 +1,4 @@
-import { type PoolType, PoolTypes } from '../pool'
+import { PoolEvents, type PoolType, PoolTypes } from '../pool'
 import { checkDynamicPoolSize } from '../utils'
 import { FixedThreadPool, type ThreadPoolOptions } from './fixed'
 
@@ -43,6 +43,13 @@ export class DynamicThreadPool<
     return !this.full && this.internalBusy()
   }
 
+  /** @inheritDoc */
+  protected checkAndEmitDynamicWorkerCreationEvents (): void {
+    if (this.full) {
+      this.emitter?.emit(PoolEvents.full, this.info)
+    }
+  }
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.dynamic
index 088d72c920092cb8637b5f86edbdedf62432f672..f7557a57c3640981b827daa00d4fe298715c836d 100644 (file)
@@ -113,6 +113,9 @@ export class FixedThreadPool<
     return false
   }
 
+  /** @inheritDoc */
+  protected checkAndEmitDynamicWorkerCreationEvents (): void {}
+
   /** @inheritDoc */
   protected get type (): PoolType {
     return PoolTypes.fixed