X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fabstract-pool.ts;h=c4181e76dfb62bc08cb2f7fbcf86e3d131038c1e;hb=a6f7f1b40b3591b19a58f69b22e751c4c4311522;hp=ab6c094094a29da154b6321e80d0567f675ff802;hpb=23135a899846318ad8c093ee03ae5301782bc011;p=poolifier.git diff --git a/src/pools/abstract-pool.ts b/src/pools/abstract-pool.ts index ab6c0940..c4181e76 100644 --- a/src/pools/abstract-pool.ts +++ b/src/pools/abstract-pool.ts @@ -4,10 +4,10 @@ import type { } from '../utility-types' import { EMPTY_FUNCTION } from '../utils' import { isKillBehavior, KillBehaviors } from '../worker/worker-options' -import type { AbstractPoolWorker } from './abstract-pool-worker' import type { PoolOptions } from './pool' import type { IPoolInternal, TasksUsage } from './pool-internal' import { PoolEmitter, PoolType } from './pool-internal' +import type { IPoolWorker } from './pool-worker' import { WorkerChoiceStrategies, WorkerChoiceStrategy @@ -18,27 +18,22 @@ const WORKER_NOT_FOUND_TASKS_USAGE_MAP = 'Worker could not be found in worker tasks usage map' /** - * Base class containing some shared logic for all poolifier pools. + * Base class that implements some shared logic for all poolifier pools. * * @template Worker Type of worker which manages this pool. * @template Data Type of data sent to the worker. This can only be serializable data. * @template Response Type of response of execution. This can only be serializable data. */ export abstract class AbstractPool< - Worker extends AbstractPoolWorker, + Worker extends IPoolWorker, Data = unknown, Response = unknown > implements IPoolInternal { /** @inheritDoc */ public readonly workers: Worker[] = [] - /** - * The workers tasks usage map. - * - * `key`: The `Worker` - * `value`: Worker tasks usage statistics. - */ - protected workersTasksUsage: Map = new Map< + /** @inheritDoc */ + public readonly workersTasksUsage: Map = new Map< Worker, TasksUsage >() @@ -182,6 +177,9 @@ export abstract class AbstractPool< workerChoiceStrategy: WorkerChoiceStrategy ): void { this.opts.workerChoiceStrategy = workerChoiceStrategy + for (const worker of this.workers) { + this.resetWorkerTasksUsage(worker) + } this.workerChoiceStrategyContext.setWorkerChoiceStrategy( workerChoiceStrategy ) @@ -305,7 +303,7 @@ export abstract class AbstractPool< ): void /** - * Register a listener callback on a given worker. + * Registers a listener callback on a given worker. * * @param worker A worker. * @param listener A message listener callback. @@ -355,12 +353,7 @@ export abstract class AbstractPool< this.workers.push(worker) // Init worker tasks usage map - this.workersTasksUsage.set(worker, { - run: 0, - running: 0, - runTime: 0, - avgRunTime: 0 - }) + this.initWorkerTasksUsage(worker) this.afterWorkerSetup(worker) @@ -469,6 +462,20 @@ export abstract class AbstractPool< } } + /** + * Initializes tasks usage statistics. + * + * @param worker The worker. + */ + initWorkerTasksUsage (worker: Worker): void { + this.workersTasksUsage.set(worker, { + run: 0, + running: 0, + runTime: 0, + avgRunTime: 0 + }) + } + /** * Removes worker tasks usage statistics. * @@ -477,4 +484,14 @@ export abstract class AbstractPool< private removeWorkerTasksUsage (worker: Worker): void { this.workersTasksUsage.delete(worker) } + + /** + * Resets worker tasks usage statistics. + * + * @param worker The worker. + */ + private resetWorkerTasksUsage (worker: Worker): void { + this.removeWorkerTasksUsage(worker) + this.initWorkerTasksUsage(worker) + } }