Interface IPool<Worker, Data, Response>

Contract definition for a poolifier pool.

interface IPool<Worker, Data, Response> {
    addTaskFunction: ((name: string, fn: TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>) => Promise<boolean>);
    destroy: (() => Promise<void>);
    emitter?: EventEmitterAsyncResource;
    enableTasksQueue: ((enable: boolean, tasksQueueOptions?: TasksQueueOptions) => void);
    execute: ((data?: Data, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response>);
    hasTaskFunction: ((name: string) => boolean);
    info: PoolInfo;
    listTaskFunctionsProperties: (() => TaskFunctionProperties[]);
    mapExecute: ((data: Iterable<Data, any, any>, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response[]>);
    removeTaskFunction: ((name: string) => Promise<boolean>);
    setDefaultTaskFunction: ((name: string) => Promise<boolean>);
    setTasksQueueOptions: ((tasksQueueOptions: TasksQueueOptions) => void);
    setWorkerChoiceStrategy: ((workerChoiceStrategy:
        | "FAIR_SHARE"
        | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
        | "LEAST_BUSY"
        | "LEAST_ELU"
        | "LEAST_USED"
        | "ROUND_ROBIN"
        | "WEIGHTED_ROUND_ROBIN", workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions) => void);
    setWorkerChoiceStrategyOptions: ((workerChoiceStrategyOptions: WorkerChoiceStrategyOptions) => boolean);
    start: (() => void);
    workerNodes: IWorkerNode<Worker, Data>[];
}

Type Parameters

  • Worker extends IWorker

    Type of worker which manages this pool.

  • Data = unknown

    Type of data sent to the worker. This can only be structured-cloneable data.

  • Response = unknown

    Type of execution response. This can only be structured-cloneable data.

Implemented by

Properties

addTaskFunction: ((name: string, fn: TaskFunction<Data, Response> | TaskFunctionObject<Data, Response>) => Promise<boolean>)

Adds a task function to this pool. If a task function with the same name already exists, it will be overwritten.

Type declaration

https://nodejs.org/api/errors.html#class-typeerror If the name parameter is not a string or an empty string.

https://nodejs.org/api/errors.html#class-typeerror If the fn parameter is not a function or task function object.

destroy: (() => Promise<void>)

Terminates all workers in this pool.

emitter?: EventEmitterAsyncResource

Pool event emitter integrated with async resource. The async tracking tooling identifier is poolifier:<PoolType>-<WorkerType>-pool.

Events that can currently be listened to:

  • 'ready': Emitted when the number of workers created in the pool has reached the minimum size expected and are ready. If the pool is dynamic with a minimum number of workers set to zero, this event is emitted when the pool is started.
  • 'busy': Emitted when the number of workers created in the pool has reached the maximum size expected and are executing concurrently their tasks quota.
  • 'busyEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer executing concurrently their tasks quota.
  • 'full': Emitted when the pool is dynamic and the number of workers created has reached the maximum size expected.
  • 'fullEnd': Emitted when the pool is dynamic and the number of workers created has no longer reached the maximum size expected.
  • 'empty': Emitted when the pool is dynamic with a minimum number of workers set to zero and the number of workers has reached the minimum size expected.
  • 'destroy': Emitted when the pool is destroyed.
  • 'error': Emitted when an uncaught error occurs.
  • 'taskError': Emitted when an error occurs while executing a task.
  • 'backPressure': Emitted when the number of workers created in the pool has reached the maximum size expected and are back pressured (i.e. their tasks queue is full: queue size >= maximum queue size).
  • 'backPressureEnd': Emitted when the number of workers created in the pool has reached the maximum size expected and are no longer back pressured (i.e. their tasks queue is no longer full: queue size < maximum queue size).
enableTasksQueue: ((enable: boolean, tasksQueueOptions?: TasksQueueOptions) => void)

Enables/disables the worker node tasks queue in this pool.

Type declaration

    • (enable, tasksQueueOptions?): void
    • Parameters

      • enable: boolean

        Whether to enable or disable the worker node tasks queue.

      • OptionaltasksQueueOptions: TasksQueueOptions

        The worker node tasks queue options.

      Returns void

execute: ((data?: Data, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response>)

Executes the specified function in the worker constructor with the task data input parameter.

Type declaration

    • (data?, name?, transferList?): Promise<Response>
    • Parameters

      • Optionaldata: Data

        The optional task input data for the specified task function. This can only be structured-cloneable data.

      • Optionalname: string

        The optional name of the task function to execute. If not specified, the default task function will be executed.

      • OptionaltransferList: readonly TransferListItem[]

        An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      Returns Promise<Response>

      Promise with a task function response that will be fulfilled when the task is completed.

hasTaskFunction: ((name: string) => boolean)

Whether the specified task function exists in this pool.

Type declaration

    • (name): boolean
    • Parameters

      • name: string

        The name of the task function.

      Returns boolean

      true if the task function exists, false otherwise.

info: PoolInfo

Pool information.

listTaskFunctionsProperties: (() => TaskFunctionProperties[])

Lists the properties of task functions available in this pool.

Type declaration

mapExecute: ((data: Iterable<Data, any, any>, name?: string, transferList?: readonly TransferListItem[]) => Promise<Response[]>)

Executes the specified function in the worker constructor with the tasks data iterable input parameter.

Type declaration

    • (data, name?, transferList?): Promise<Response[]>
    • Parameters

      • data: Iterable<Data, any, any>

        The tasks iterable input data for the specified task function. This can only be an iterable of structured-cloneable data.

      • Optionalname: string

        The optional name of the task function to execute. If not specified, the default task function will be executed.

      • OptionaltransferList: readonly TransferListItem[]

        An optional array of transferable objects to transfer ownership of. Ownership of the transferred objects is given to the chosen pool's worker_threads worker and they should not be used in the main thread afterwards.

      Returns Promise<Response[]>

      Promise with an array of task function responses that will be fulfilled when the tasks are completed.

removeTaskFunction: ((name: string) => Promise<boolean>)

Removes a task function from this pool.

Type declaration

    • (name): Promise<boolean>
    • Parameters

      • name: string

        The name of the task function.

      Returns Promise<boolean>

      true if the task function was removed, false otherwise.

setDefaultTaskFunction: ((name: string) => Promise<boolean>)

Sets the default task function in this pool.

Type declaration

    • (name): Promise<boolean>
    • Parameters

      • name: string

        The name of the task function.

      Returns Promise<boolean>

      true if the default task function was set, false otherwise.

setTasksQueueOptions: ((tasksQueueOptions: TasksQueueOptions) => void)

Sets the worker node tasks queue options in this pool.

Type declaration

    • (tasksQueueOptions): void
    • Parameters

      Returns void

setWorkerChoiceStrategy: ((workerChoiceStrategy:
    | "FAIR_SHARE"
    | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
    | "LEAST_BUSY"
    | "LEAST_ELU"
    | "LEAST_USED"
    | "ROUND_ROBIN"
    | "WEIGHTED_ROUND_ROBIN", workerChoiceStrategyOptions?: WorkerChoiceStrategyOptions) => void)

Sets the default worker choice strategy in this pool.

Type declaration

    • (workerChoiceStrategy, workerChoiceStrategyOptions?): void
    • Parameters

      • workerChoiceStrategy:
            | "FAIR_SHARE"
            | "INTERLEAVED_WEIGHTED_ROUND_ROBIN"
            | "LEAST_BUSY"
            | "LEAST_ELU"
            | "LEAST_USED"
            | "ROUND_ROBIN"
            | "WEIGHTED_ROUND_ROBIN"

        The default worker choice strategy.

      • OptionalworkerChoiceStrategyOptions: WorkerChoiceStrategyOptions

        The worker choice strategy options.

      Returns void

setWorkerChoiceStrategyOptions: ((workerChoiceStrategyOptions: WorkerChoiceStrategyOptions) => boolean)

Sets the worker choice strategy options in this pool.

Type declaration

    • (workerChoiceStrategyOptions): boolean
    • Parameters

      Returns boolean

      true if the worker choice strategy options were set, false otherwise.

start: (() => void)

Starts the minimum number of workers in this pool.

workerNodes: IWorkerNode<Worker, Data>[]

Pool worker nodes.