} from './selection-strategies/selection-strategies-types'
import { WorkerChoiceStrategyContext } from './selection-strategies/worker-choice-strategy-context'
/**
* Base class that implements some shared logic for all poolifier pools.
*
} from './selection-strategies/selection-strategies-types'
import { WorkerChoiceStrategyContext } from './selection-strategies/worker-choice-strategy-context'
/**
* 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.
+ * @typeParam Worker - Type of worker which manages this pool.
+ * @typeParam Data - Type of data sent to the worker. This can only be serializable data.
+ * @typeParam Response - Type of response of execution. This can only be serializable data.
*/
export abstract class AbstractPool<
Worker extends IPoolWorker,
Data = unknown,
Response = unknown
> implements IPoolInternal<Worker, Data, Response> {
*/
export abstract class AbstractPool<
Worker extends IPoolWorker,
Data = unknown,
Response = unknown
> implements IPoolInternal<Worker, Data, Response> {
- * @param numberOfWorkers Number of workers that this pool should manage.
- * @param filePath Path to the worker-file.
- * @param opts Options for the pool.
+ * @param numberOfWorkers - Number of workers that this pool should manage.
+ * @param filePath - Path to the worker-file.
+ * @param opts - Options for the pool.
public getWorkerRunningTasks (worker: Worker): number | undefined {
return this.workersTasksUsage.get(worker)?.running
}
public getWorkerRunningTasks (worker: Worker): number | undefined {
return this.workersTasksUsage.get(worker)?.running
}
public getWorkerAverageTasksRunTime (worker: Worker): number | undefined {
return this.workersTasksUsage.get(worker)?.avgRunTime
}
public getWorkerAverageTasksRunTime (worker: Worker): number | undefined {
return this.workersTasksUsage.get(worker)?.avgRunTime
}
public findFreeWorker (): Worker | false {
for (const worker of this.workers) {
if (this.getWorkerRunningTasks(worker) === 0) {
public findFreeWorker (): Worker | false {
for (const worker of this.workers) {
if (this.getWorkerRunningTasks(worker) === 0) {
public async execute (data: Data): Promise<Response> {
// Configure worker to handle message with the specified task
const worker = this.chooseWorker()
public async execute (data: Data): Promise<Response> {
// Configure worker to handle message with the specified task
const worker = this.chooseWorker()
public async destroy (): Promise<void> {
await Promise.all(this.workers.map(worker => this.destroyWorker(worker)))
}
public async destroy (): Promise<void> {
await Promise.all(this.workers.map(worker => this.destroyWorker(worker)))
}
*/
protected beforePromiseWorkerResponseHook (worker: Worker): void {
this.increaseWorkerRunningTasks(worker)
*/
protected beforePromiseWorkerResponseHook (worker: Worker): void {
this.increaseWorkerRunningTasks(worker)
*/
protected afterPromiseWorkerResponseHook (
message: MessageValue<Response>,
*/
protected afterPromiseWorkerResponseHook (
message: MessageValue<Response>,
- * @param worker The worker which should register a listener.
- * @param listener The message listener callback.
+ * @param worker - The worker which should register a listener.
+ * @param listener - The message listener callback.
worker.on('error', this.opts.errorHandler ?? EMPTY_FUNCTION)
worker.on('online', this.opts.onlineHandler ?? EMPTY_FUNCTION)
worker.on('exit', this.opts.exitHandler ?? EMPTY_FUNCTION)
worker.on('error', this.opts.errorHandler ?? EMPTY_FUNCTION)
worker.on('online', this.opts.onlineHandler ?? EMPTY_FUNCTION)
worker.on('exit', this.opts.exitHandler ?? EMPTY_FUNCTION)
*/
private increaseWorkerRunningTasks (worker: Worker): void {
this.stepWorkerRunningTasks(worker, 1)
*/
private increaseWorkerRunningTasks (worker: Worker): void {
this.stepWorkerRunningTasks(worker, 1)
*/
private decreaseWorkerRunningTasks (worker: Worker): void {
this.stepWorkerRunningTasks(worker, -1)
*/
private decreaseWorkerRunningTasks (worker: Worker): void {
this.stepWorkerRunningTasks(worker, -1)
- * @param worker Worker which running tasks are stepped.
- * @param step Number of running tasks step.
+ * @param worker - Worker which running tasks are stepped.
+ * @param step - Number of running tasks step.
*/
private stepWorkerRunningTasks (worker: Worker, step: number): void {
if (this.checkWorkerTasksUsage(worker)) {
*/
private stepWorkerRunningTasks (worker: Worker, step: number): void {
if (this.checkWorkerTasksUsage(worker)) {
*/
private stepWorkerRunTasks (worker: Worker, step: number): void {
if (this.checkWorkerTasksUsage(worker)) {
*/
private stepWorkerRunTasks (worker: Worker, step: number): void {
if (this.checkWorkerTasksUsage(worker)) {
* @returns `true` if the worker is registered in the workers tasks usage map. `false` otherwise.
*/
private checkWorkerTasksUsage (worker: Worker): boolean {
* @returns `true` if the worker is registered in the workers tasks usage map. `false` otherwise.
*/
private checkWorkerTasksUsage (worker: Worker): boolean {
*/
private initWorkerTasksUsage (worker: Worker): void {
this.workersTasksUsage.set(worker, {
*/
private initWorkerTasksUsage (worker: Worker): void {
this.workersTasksUsage.set(worker, {