import type { IWorker } from '../worker'
import type {
IWorkerChoiceStrategy,
+ StrategyPolicy,
TaskStatisticsRequirements,
WorkerChoiceStrategyOptions
} from './selection-strategies-types'
* Toggles finding the last free worker node key.
*/
private toggleFindLastFreeWorkerNodeKey: boolean = false
+
+ /** @inheritDoc */
+ public readonly strategyPolicy: StrategyPolicy = {
+ useDynamicWorker: false
+ }
+
/** @inheritDoc */
public readonly taskStatisticsRequirements: TaskStatisticsRequirements = {
runTime: {
average: false,
median: false
},
- elu: false
+ elu: {
+ aggregate: false,
+ average: false,
+ median: false
+ }
}
/**
this.taskStatisticsRequirements.waitTime.median = opts.waitTime
.median as boolean
}
+ if (
+ this.taskStatisticsRequirements.elu.average &&
+ opts.elu?.median === true
+ ) {
+ this.taskStatisticsRequirements.elu.average = false
+ this.taskStatisticsRequirements.elu.median = opts.elu.median as boolean
+ }
+ if (
+ this.taskStatisticsRequirements.elu.median &&
+ opts.elu?.median === false
+ ) {
+ this.taskStatisticsRequirements.elu.average = true
+ this.taskStatisticsRequirements.elu.median = opts.elu.median as boolean
+ }
}
/** @inheritDoc */
* @param workerNodeKey - The worker node key.
* @returns The worker task wait time.
*/
- protected getWorkerWaitTime (workerNodeKey: number): number {
+ protected getWorkerTaskWaitTime (workerNodeKey: number): number {
return this.taskStatisticsRequirements.waitTime.median
? this.pool.workerNodes[workerNodeKey].workerUsage.runTime.median
: this.pool.workerNodes[workerNodeKey].workerUsage.runTime.average
}
+ /**
+ * Gets the worker task ELU.
+ * If the task statistics require the average ELU, the average ELU is returned.
+ * If the task statistics require the median ELU, the median ELU is returned.
+ *
+ * @param workerNodeKey - The worker node key.
+ * @returns The worker task ELU.
+ */
+ protected getWorkerTaskElu (workerNodeKey: number): number {
+ return this.taskStatisticsRequirements.elu.median
+ ? this.pool.workerNodes[workerNodeKey].workerUsage.elu.active.median
+ : this.pool.workerNodes[workerNodeKey].workerUsage.elu.active.average
+ }
+
protected computeDefaultWorkerWeight (): number {
let cpusCycleTimeWeight = 0
for (const cpu of cpus()) {