- private findLastFreeWorkerNodeKey (): number {
- // It requires node >= 18.0.0
- // return this.workerNodes.findLastIndex(workerNode => {
- // return workerNode.tasksUsage?.running === 0
- // })
- for (let i = this.pool.workerNodes.length - 1; i >= 0; i--) {
- if (this.pool.workerNodes[i].tasksUsage?.running === 0) {
- return i
- }
+ protected assignChosenWorkerNodeKey (
+ chosenWorkerNodeKey: number | undefined
+ ): void {
+ if (chosenWorkerNodeKey != null) {
+ this.nextWorkerNodeKey = chosenWorkerNodeKey
+ } else {
+ this.nextWorkerNodeKey = undefined
+ }
+ }
+
+ protected checkNextWorkerNodeEligibility (
+ chosenWorkerNodeKey: number | undefined
+ ): void {
+ if (!this.isWorkerNodeEligible(this.nextWorkerNodeKey as number)) {
+ this.nextWorkerNodeKey = undefined
+ this.previousWorkerNodeKey =
+ chosenWorkerNodeKey ?? this.previousWorkerNodeKey
+ }
+ }
+
+ protected computeDefaultWorkerWeight (): number {
+ let cpusCycleTimeWeight = 0
+ for (const cpu of cpus()) {
+ // CPU estimated cycle time
+ const numberOfDigits = cpu.speed.toString().length - 1
+ const cpuCycleTime = 1 / (cpu.speed / Math.pow(10, numberOfDigits))
+ cpusCycleTimeWeight += cpuCycleTime * Math.pow(10, numberOfDigits)