X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fabstract-pool.ts;h=0685f998d4aaf11d0cb93d86fcdb24b0e3476fbc;hb=d63d3be337008b24e8669a8912f82ae426dd9b2e;hp=ac3bd6cc7b02f0f7e592de747a5668a25d845f09;hpb=aacd8188a9f2f915d5fa02a0db885d7f3211a996;p=poolifier.git diff --git a/src/pools/abstract-pool.ts b/src/pools/abstract-pool.ts index ac3bd6cc..0685f998 100644 --- a/src/pools/abstract-pool.ts +++ b/src/pools/abstract-pool.ts @@ -83,7 +83,7 @@ export abstract class AbstractPool< /** * - `key`: The `Worker` - * - `value`: Number of tasks that has been assigned to that worker since it started + * - `value`: Number of tasks currently in progress on the worker. */ public readonly tasks: Map = new Map() @@ -120,7 +120,6 @@ export abstract class AbstractPool< if (!this.filePath) { throw new Error('Please specify a file with a worker implementation') } - this.setupHook() for (let i = 1; i <= this.numberOfWorkers; i++) { @@ -191,9 +190,23 @@ export abstract class AbstractPool< * @param worker Workers whose tasks are increased. */ protected increaseWorkersTask (worker: Worker): void { - const numberOfTasksTheWorkerHas = this.tasks.get(worker) - if (numberOfTasksTheWorkerHas !== undefined) { - this.tasks.set(worker, numberOfTasksTheWorkerHas + 1) + const numberOfTasksInProgress = this.tasks.get(worker) + if (numberOfTasksInProgress !== undefined) { + this.tasks.set(worker, numberOfTasksInProgress + 1) + } else { + throw Error('Worker could not be found in tasks map') + } + } + + /** + * Decrease the number of tasks that the given workers has done. + * + * @param worker Workers whose tasks are decreased. + */ + protected decreaseWorkersTasks (worker: Worker): void { + const numberOfTasksInProgress = this.tasks.get(worker) + if (numberOfTasksInProgress !== undefined) { + this.tasks.set(worker, numberOfTasksInProgress - 1) } else { throw Error('Worker could not be found in tasks map') } @@ -238,15 +251,13 @@ export abstract class AbstractPool< message: MessageValue ): void - protected abstract registerWorkerMessageListener ( - port: Worker, - listener: (message: MessageValue) => void - ): void + protected abstract registerWorkerMessageListener< + Message extends Data | Response + > (worker: Worker, listener: (message: MessageValue) => void): void - protected abstract unregisterWorkerMessageListener ( - port: Worker, - listener: (message: MessageValue) => void - ): void + protected abstract unregisterWorkerMessageListener< + Message extends Data | Response + > (worker: Worker, listener: (message: MessageValue) => void): void protected internalExecute ( worker: Worker, @@ -256,7 +267,7 @@ export abstract class AbstractPool< const listener: (message: MessageValue) => void = message => { if (message.id === messageId) { this.unregisterWorkerMessageListener(worker, listener) - this.increaseWorkersTask(worker) + this.decreaseWorkersTasks(worker) if (message.error) reject(message.error) else resolve(message.data as Response) }