Skip to content

Worker pool API for pseudo or real JavaScript concurrency.

Notifications You must be signed in to change notification settings

t-ski/worker-pool

Repository files navigation

Worker Pool

The abstract WorkerPool class allows to implement an arbitrary modular worker mechanism:

interface IWorkerPoolOptions {
    baseSize?: number;
    timeout?: number;
    maxPending?: number;
}

abstract class WorkerPool<Worker extends EventEmitter, IOptions extends IWorkerPoolOptions, I, O, E> extends EventEmitter {
    protected readonly options: IOptions;
    protected readonly workerModulePath: string;

    constructor(workerModulePath: string, options?: IOptions);

    protected abstract createWorker(): Worker | Promise<Worker>;
    protected abstract activateWorker(worker: Worker, dataIn: I): void;
    protected abstract destroyWorker(worker: Worker): void;
}
Generic Description
Worker Worker class (instances to activate)
I Worker input type
O Worker output type
E Worker error type

ThreadPool

Pseudo concurrency

class ThreadPool<I, O, E>

Process Pool

Real concurrency (multi core)

interface IProcessPoolOptions extends IWorkerPoolOptions {
    processOptions?: {
        args?: string[];
        cwd?: string;
    };
}

class ProcessPool<I extends string|Buffer, O extends string| Buffer, E>

Due to IPC nature, input and output of process pool workers must be serialisable.

© Thassilo Martin Schiepanski