type IWorkerChoiceStrategy,
Measurements,
type TaskStatisticsRequirements,
- type WorkerChoiceStrategyOptions
+ type WorkerChoiceStrategyOptions,
} 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.
runTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
waitTime: {
aggregate: true,
average: true,
- median: false
+ median: false,
},
elu: {
aggregate: true,
average: true,
- median: false
- }
+ median: false,
+ },
}
/** @inheritDoc */
public update (workerNodeKey: number): boolean {
this.pool.workerNodes[workerNodeKey].strategyData = {
virtualTaskEndTimestamp:
- this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey)
+ this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey),
}
return true
}
}
private fairShareNextWorkerNodeKey (): number | undefined {
- if (this.pool.workerNodes.length === 0) {
- return undefined
- }
return this.pool.workerNodes.reduce(
(minWorkerNodeKey, workerNode, workerNodeKey, workerNodes) => {
if (workerNode.strategyData?.virtualTaskEndTimestamp == null) {
workerNode.strategyData = {
virtualTaskEndTimestamp:
- this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey)
+ this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey),
}
}
return this.isWorkerNodeReady(workerNodeKey) &&
/**
* Computes 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()
- return now < (virtualTaskEndTimestamp ?? -Infinity)
+ return now < (virtualTaskEndTimestamp ?? Number.NEGATIVE_INFINITY)
? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
virtualTaskEndTimestamp!
: now