-import { cpus } from 'os'
+import { cpus } from 'node:os'
import type { IPoolInternal } from '../pool-internal'
import type { IPoolWorker } from '../pool-worker'
import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy'
}
/**
- * Worker index where the current task will be submitted.
+ * Worker id where the current task will be submitted.
*/
- private currentWorkerIndex: number = 0
+ private currentWorkerId: number = 0
/**
* Default worker weight.
*/
/** {@inheritDoc} */
public reset (): boolean {
- this.currentWorkerIndex = 0
+ this.currentWorkerId = 0
this.workersTaskRunTime.clear()
this.initWorkersTaskRunTime()
return true
/** {@inheritDoc} */
public choose (): Worker {
- const chosenWorker = this.pool.workers[this.currentWorkerIndex]
+ const chosenWorker = this.pool.workers.get(this.currentWorkerId)
+ ?.worker as Worker
if (this.isDynamicPool && !this.workersTaskRunTime.has(chosenWorker)) {
this.initWorkerTaskRunTime(chosenWorker)
}
(this.getWorkerVirtualTaskRunTime(chosenWorker) ?? 0)
)
} else {
- this.currentWorkerIndex =
- this.currentWorkerIndex === this.pool.workers.length - 1
+ this.currentWorkerId =
+ this.currentWorkerId === this.pool.workers.size - 1
? 0
- : this.currentWorkerIndex + 1
+ : this.currentWorkerId + 1
this.setWorkerTaskRunTime(
- this.pool.workers[this.currentWorkerIndex],
+ this.pool.workers.get(this.currentWorkerId)?.worker as Worker,
workerTaskWeight,
0
)
}
private initWorkersTaskRunTime (): void {
- for (const worker of this.pool.workers) {
- this.initWorkerTaskRunTime(worker)
+ for (const value of this.pool.workers.values()) {
+ this.initWorkerTaskRunTime(value.worker)
}
}
}
private getWorkerVirtualTaskRunTime (worker: Worker): number | undefined {
- return this.pool.getWorkerAverageTasksRunTime(worker)
+ return this.pool.getWorkerTasksUsage(worker)?.avgRunTime
}
private computeWorkerWeight (): number {