【问题标题】:Round robin java implementation循环java实现
【发布时间】:2014-02-15 20:56:19
【问题描述】:

我被要求做一个特定算法的多线程模拟器。 其中一项任务是将常规调度结果与循环结果进行比较。 当我在寻找有关循环调度方法的信息时,我发现了不同的一般解释和一些代码示例,我找不到它们与调度线程之间的任何关系。 例如这段代码(在堆栈溢出中找到):

public static void RR3(int numProcess, int[] cpuBurst, int[] arrivalTime){
    int quantum = 3,time = 0, temp;
    int completionTime = 0;
    LinkedList <Integer>process = new LinkedList();
    for (int i = 0; i < numProcess; i++) {
        process.add(i, cpuBurst[i]);
    }

    while (process.isEmpty() != true){

        for (int j  = 0; j < quantum; j++) {
            System.out.println(process.getFirst());
            if(process.peek() == 0 ){
                completionTime = completionTime + time;
                process.remove();
            }
            else{
                temp = process.pop();
                process.push(temp - 1);                   
                time++;                  
            }
        }
        process.addLast(process.getFirst()); 
        process.removeFirst();
    }

    double act = (double) completionTime/numProcess;
    System.out.println("-----------------RR3-----------------");
    System.out.println("             Act = " + act + "ms");  
}

除了表示进程数量、每个进程的时间等的整数外,我什么都看不到,但我该如何管理它们的行为呢?我没有看到任何要求进程运行或停止的调用。

【问题讨论】:

  • 这个具体算法是什么?

标签: java multithreading scheduling round-robin


【解决方案1】:

您已经注意到这是一个抽象。即没有执行真正的工作。相反,工作只是由一组表示工作量的整数“模仿”。

关于如何运行或停止进程的问题在某种程度上隐藏在算法本身中:LinkedList 存储“活动”进程。它们都是从头开始的。在每一轮中,他们都会获得一个很短的时间段,他们可以在其中完成一些工作。当他们的所有工作完成后,他们就会从列表中删除。

在最简单的形式中,当整数值被实际任务替换时,您可以替换行

if(process.peek() == 0 ){ ... }

类似的东西

Task task = process.peek();
if (task.isFinished()) { ... }

否则(在else情况下),当有工作要做时,你可以替换行

temp = process.pop();
process.push(temp - 1);  

类似的东西

Task task = process.peek();
task.doALittleBitOfWork();

您发布的代码最初是问题的一部分,因此必须假设它仍然存在问题,但可能足以了解基本概念。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2012-09-02
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多