-import type { TransferListItem } from 'node:worker_threads'
+import type { TransferListItem, WorkerOptions } from 'node:worker_threads'
import type { EventEmitterAsyncResource } from 'node:events'
-import type { TaskFunction } from '../worker/task-functions'
+import type { ClusterSettings } from 'node:cluster'
+import type { TaskFunction } from '../worker/task-functions.js'
import type {
ErrorHandler,
ExitHandler,
MessageHandler,
OnlineHandler,
WorkerType
-} from './worker'
+} from './worker.js'
import type {
WorkerChoiceStrategy,
WorkerChoiceStrategyOptions
-} from './selection-strategies/selection-strategies-types'
+} from './selection-strategies/selection-strategies-types.js'
/**
* Enumeration of pool types.
readonly utilization?: number
/** Pool total worker nodes. */
readonly workerNodes: number
+ /** Pool stealing worker nodes. */
+ readonly stealingWorkerNodes?: number
/** Pool idle worker nodes. */
readonly idleWorkerNodes: number
/** Pool busy worker nodes. */
*/
readonly concurrency?: number
/**
- * Whether to enable task stealing on empty queue.
+ * Whether to enable task stealing on idle.
*
* @defaultValue true
*/
* @defaultValue true
*/
readonly tasksStealingOnBackPressure?: boolean
+ /**
+ * Queued tasks finished timeout in milliseconds at worker node termination.
+ *
+ * @defaultValue 2000
+ */
+ readonly tasksFinishedTimeout?: number
}
/**
* Pool worker node tasks queue options.
*/
tasksQueueOptions?: TasksQueueOptions
+ /**
+ * Worker options.
+ *
+ * @see https://nodejs.org/api/worker_threads.html#new-workerfilename-options
+ */
+ workerOptions?: WorkerOptions
+ /**
+ * Key/value pairs to add to worker process environment.
+ *
+ * @see https://nodejs.org/api/cluster.html#cluster_cluster_fork_env
+ */
+ env?: Record<string, unknown>
+ /**
+ * Cluster settings.
+ *
+ * @see https://nodejs.org/api/cluster.html#cluster_cluster_settings
+ */
+ settings?: ClusterSettings
}
/**
* @internal
*/
readonly workerNodes: Array<IWorkerNode<Worker, Data>>
- /**
- * Whether the worker node has back pressure (i.e. its tasks queue is full).
- *
- * @param workerNodeKey - The worker node key.
- * @returns `true` if the worker node has back pressure, `false` otherwise.
- * @internal
- */
- readonly hasWorkerNodeBackPressure: (workerNodeKey: number) => boolean
/**
* Event emitter integrated with async resource on which events can be listened to.
* The async tracking tooling identifier is `poolifier:<PoolType>-<WorkerType>-pool`.