perf: only check worker status when necessary
[poolifier.git] / src / pools / abstract-pool.ts
index 1cd6c56f61942bc911d6969b53ae63f1d28f5ddf..122e9fa5c9dbbad12f7eaf01b1db4f0b38ab35e4 100644 (file)
@@ -2,8 +2,8 @@ import type {
   MessageValue,
   PromiseWorkerResponseWrapper
 } from '../utility-types'
-import { EMPTY_FUNCTION, EMPTY_LITERAL } from '../utils'
-import { isKillBehavior, KillBehaviors } from '../worker/worker-options'
+import { EMPTY_FUNCTION } from '../utils'
+import { KillBehaviors, isKillBehavior } from '../worker/worker-options'
 import type { PoolOptions } from './pool'
 import { PoolEmitter } from './pool'
 import type { IPoolInternal, TasksUsage } from './pool-internal'
@@ -11,7 +11,7 @@ import { PoolType } from './pool-internal'
 import type { IPoolWorker } from './pool-worker'
 import {
   WorkerChoiceStrategies,
-  WorkerChoiceStrategy
+  type WorkerChoiceStrategy
 } from './selection-strategies/selection-strategies-types'
 import { WorkerChoiceStrategyContext } from './selection-strategies/worker-choice-strategy-context'
 
@@ -105,7 +105,7 @@ export abstract class AbstractPool<
             this.getWorkerRunningTasks(workerCreated) === 0
           ) {
             // Kill received from the worker, means that no new tasks are submitted to that worker for a while ( > maxInactiveTime)
-            void (this.destroyWorker(workerCreated) as Promise<void>)
+            void this.destroyWorker(workerCreated)
           }
         })
         return workerCreated
@@ -208,7 +208,8 @@ export abstract class AbstractPool<
     const res = this.internalExecute(worker, this.nextMessageId)
     this.checkAndEmitBusy()
     this.sendToWorker(worker, {
-      data: data ?? (EMPTY_LITERAL as Data),
+      // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
+      data: data ?? ({} as Data),
       id: this.nextMessageId
     })
     ++this.nextMessageId
@@ -218,7 +219,11 @@ export abstract class AbstractPool<
 
   /** {@inheritDoc} */
   public async destroy (): Promise<void> {
-    await Promise.all(this.workers.map(worker => this.destroyWorker(worker)))
+    await Promise.all(
+      this.workers.map(async worker => {
+        await this.destroyWorker(worker)
+      })
+    )
   }
 
   /**