首页 > 解决方案 > 如何修复检查切片中最小数字以使用 Golang 进行步幅调度的函数?

问题描述

有一部分工作。每个作业都有一个 Pass 值,stride=large num/tickets,tickets。我正在尝试步幅调整并试图实现以下目标:

好像我错过了。需要帮助来修复该功能。

我已经测试过:

//size, tickets int, estimated time.Duration
k(t010, 0, 100), // a
        k(t010, 0, 50),  // b
        k(t010, 0, 250), // c

我的代码:

//

func getNewJob.... 
min := LowestVal(joblist...)

    joblist[min].Pass += joblist[min].Stride

    return joblist[min]


func LowestVal(theJobs slice) int {
    lowest := 100
    lowestId := 0

    for i := 0; i < len(theJobs); i++ { //200 A

        if i != lowestId && theJobs[i].Pass == theJobs[lowestId].Pass {
            if theJobs[i].Stride < theJobs[lowestId].Stride {
                lowest = theJobs[i].Pass
                lowestId = i
                continue

            }
        }

        if theJobs[i].Pass < lowest {
            lowest = theJobs[i].Pass
            lowestId = i
        }

    }

    return lowestId
}

测试结果:

0s    C(10ms)(1x) (p=   40,s=  40,t=250)
1ms   A(10ms)(1x) (p=  100,s= 100,t=100)
2ms   B(10ms)(1x) (p=  200,s= 200,t= 50)
3ms   C( 9ms)(1x) (p=   80,s=  40,t=250)
4ms   C( 8ms)(1x) (p=  120,s=  40,t=250)
5ms   C( 7ms)(1x) (p=  160,s=  40,t=250)
6ms   C( 6ms)(1x) (p=  200,s=  40,t=250)
7ms   C( 5ms)(1x) (p=  240,s=  40,t=250)
8ms   C( 4ms)(1x) (p=  280,s=  40,t=250)
9ms   C( 3ms)(1x) (p=  320,s=  40,t=250)
10ms  C( 2ms)(1x) (p=  360,s=  40,t=250)
11ms  C( 1ms)(1x) (p=  400,s=  40,t=250)
12ms  C(  0s)(1x) (p=  440,s=  40,t=250)
13ms  C(-1ms)(1x) (p=  480,s=  40,t=250)
14ms  Idle

但它应该是:

0s    C(10ms)(1x)
1ms   A(10ms)(1x)
2ms   B(10ms)(1x)
3ms   C( 9ms)(1x)
4ms   C( 8ms)(1x)
5ms   A( 9ms)(1x)
6ms   C( 7ms)(1x)
7ms   C( 6ms)(1x)
8ms   C( 5ms)(1x)
9ms   A( 8ms)(1x)
10ms  B( 9ms)(1x)
11ms  C( 4ms)(1x)
12ms  C( 3ms)(1x)
13ms  A( 7ms)(1x)
14ms  C( 2ms)(1x)
15ms  C( 1ms)(1x)
16ms  A( 6ms)(1x)
17ms  B( 8ms)(1x)
18ms  A( 5ms)(1x)
19ms  A( 4ms)(1x)
20ms  B( 7ms)(1x)
21ms  A( 3ms)(1x)
22ms  A( 2ms)(1x)
23ms  B( 6ms)(1x)
24ms  A( 1ms)(1x)
25ms  B( 5ms)(1x)
26ms  B( 4ms)(1x)
27ms  B( 3ms)(1x)
28ms  B( 2ms)(1x)
29ms  B( 1ms)(1x)
30ms  Idle

标签: gooperating-systemstride

解决方案


推荐阅读