type IWorkerChoiceStrategy,
Measurements,
type TaskStatisticsRequirements,
type IWorkerChoiceStrategy,
Measurements,
type TaskStatisticsRequirements,
} from './selection-strategies-types.js'
/**
* Selects the next worker with a fair share scheduling algorithm.
* Loosely modeled after the fair queueing algorithm: https://en.wikipedia.org/wiki/Fair_queuing.
} from './selection-strategies-types.js'
/**
* Selects the next worker with a fair share scheduling algorithm.
* Loosely modeled after the fair queueing algorithm: https://en.wikipedia.org/wiki/Fair_queuing.
* @typeParam Worker - Type of worker which manages the strategy.
* @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
* @typeParam Response - Type of execution response. This can only be structured-cloneable data.
* @typeParam Worker - Type of worker which manages the strategy.
* @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
* @typeParam Response - Type of execution response. This can only be structured-cloneable data.
public update (workerNodeKey: number): boolean {
this.pool.workerNodes[workerNodeKey].strategyData = {
virtualTaskEndTimestamp:
public update (workerNodeKey: number): boolean {
this.pool.workerNodes[workerNodeKey].strategyData = {
virtualTaskEndTimestamp:
return this.pool.workerNodes.reduce(
(minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
workerNode.strategyData = {
virtualTaskEndTimestamp:
return this.pool.workerNodes.reduce(
(minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
workerNode.strategyData = {
virtualTaskEndTimestamp:
* @param workerNodeKey - The worker node key.
* @returns The worker node key virtual task end timestamp.
*/
* @param workerNodeKey - The worker node key.
* @returns The worker node key virtual task end timestamp.
*/
this.pool.workerNodes[workerNodeKey]?.strategyData
?.virtualTaskEndTimestamp
const now = performance.now()
this.pool.workerNodes[workerNodeKey]?.strategyData
?.virtualTaskEndTimestamp
const now = performance.now()