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 |
Pseudo concurrency
class ThreadPool<I, O, E>
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