Round-robin 演算法
Round-robin 是一種使用在 程式 和 網路分配 計算中的演算法。
以 程式分配為例:
假設我們的time slot ( 單次執行程式的最長時間) 是100 ms, 如果 job1 一共需要消耗250 ms來執行, 那麼 round-robin 分配器就會暫停 job1 在其執行100 ms之後, 然後分配給其他的程式, 並且將 job1 剩下的內容放到佇列中排隊,直到 job1 執行結束。
Process name | Arrival time | Execute time |
---|---|---|
P0 | 0 | 250 |
P1 | 50 | 170 |
P2 | 130 | 75 |
P3 | 190 | 100 |
P4 | 210 | 130 |
P5 | 350 | 50 |
執行佇列如下。
時間 | 佇列 | 解釋 |
0 | P0 | 時間0的時候, P0 到達 |
100 | P1 P0 | 當執行100ms的時候,應該分配給下一個程式,P1在0~100內到達,P0剩下150 ms需要執行 |
200 | P0 P2 P3 P1 | 當執行200ms的時候,新程式 P2 和 P3 在100~200內 到達,P1 剩下70ms, |
300 | P2 P3 P1 P4 P0 | 當執行300ms的時候,新程式P4 在200~300 內到達,P0 剩下 50ms |
375 | P3 P1 P4 P0 P5 | 當從300ms到375ms的時候,程式P2完成,那麼我們將結束它,進而按照佇列繼續工作,注意把在300 ~ 375內到達的P5放進程式佇列中 |
475 | P1 P4 P0 P5 | P3結束, 迴歸下佇列中的程式。P1 70ms, P4 130ms P0 50ms P5 50ms |
545 | P4 P0 P5 | P1結束 |
645 | P0 P5 P4 | P4剩下30ms |
695 | P5 P4 | P0結束 |
745 | P4 | P5結束 |
775 | P4結束 | |
public static void RoundRobin_Algo(int[] arrTime, int[] exeTime, int timeSlot) {
if (arrTime == null || exeTime == null || arrTime.length != exeTime.length) {
System.out.println("Error!");
}
Queue<process> queue = new LinkedList<process>();
int index = 0;
int totalWaitTime = 0; //所有程式的等待總時間
int currentTime = 0; //當前時間
int visitedTimes = 0; //CPU訪問次數
while (!queue.isEmpty() || index < arrTime.length) {
if (!queue.isEmpty()) {
visitedTimes ++;
process tempP = queue.poll();
//waiting time in total
totalWaitTime += currentTime - tempP.arrTime;
//update the currentTime
currentTime += Math.min(tempP.exeTime, timeSlot);
//add the process which arrived before the end of this process finished.
for (; index < arrTime.length && arrTime[index] < currentTime; index++) {
queue.add(new process(arrTime[index], exeTime[index]));
}
//add the rest of current process into process queue
if (tempP.exeTime > timeSlot) {
queue.add(new process(currentTime, tempP.exeTime - timeSlot));
}
} else {
queue.add(new process(arrTime[index], exeTime[index]));
currentTime = arrTime[index];
index++;
visitedTimes ++;
}
}
System.out.println("Total wait time among the process: " + totalWaitTime);
System.out.println("Total CPU visited times: " + visitedTimes);
}
Let me know, If you found any issues.
相關文章
- Redhat Linux bind round-robin配置的探討RedhatLinux
- 現代分散式資料庫 資料分佈方式 Round-Robin、Range、List 和 Hash分散式資料庫
- 作業系統綜合題之“採用時間片輪轉排程演算法(Round-Robin,RR)執行5個程序,P1程序週轉時間為多少”作業系統演算法
- 【演算法】KMP演算法演算法KMP
- 演算法-回溯演算法演算法
- 【JAVA演算法】圖論演算法 -- Dijkstra演算法Java演算法圖論
- 演算法(2)KMP演算法演算法KMP
- 【演算法】遞迴演算法演算法遞迴
- 演算法題:洗牌演算法演算法
- [演算法之回溯演算法]演算法
- Manacher演算法、KMP演算法演算法KMP
- 【演算法】KMP演算法解析演算法KMP
- 介面限流演算法:漏桶演算法&令牌桶演算法演算法
- 前端演算法:快速排序演算法前端演算法排序
- 演算法初探--遞迴演算法演算法遞迴
- BP演算法和LMBP演算法演算法
- 隨機演算法 概率演算法隨機演算法
- STL::演算法::常見演算法演算法
- 常用演算法 插值演算法演算法
- 前向分步演算法 && AdaBoost演算法 && 提升樹(GBDT)演算法 && XGBoost演算法演算法
- c/c++ 通用的(泛型)演算法 之 只讀演算法,寫演算法,排序演算法C++泛型演算法排序
- 介面限流演算法:漏桶演算法&令牌桶演算法&redis限流演算法Redis
- 什麼是演算法?如何學習演算法?演算法入門演算法
- 演算法金 | 突破最強演算法模型,決策樹演算法!!演算法模型
- 分類演算法-AdaBoot 演算法演算法boot
- 演算法(八):圖解KNN演算法演算法圖解KNN
- 演算法那些事之冒泡演算法演算法
- 基礎演算法之排序演算法演算法排序
- 最短路-SPFA演算法&Floyd演算法演算法
- 複習常用演算法_冒泡演算法演算法
- 常用演算法之貪心演算法演算法
- 演算法修養--A*尋路演算法演算法
- 演算法進階(8): EM演算法演算法
- 【JAVA演算法】排序演算法 -- 快速排序Java演算法排序
- 非對稱演算法----RSA演算法演算法
- 演算法篇---氣泡排序演算法演算法排序
- 演算法系列:求冪演算法演算法
- PageRank演算法和HITS演算法演算法