1. 程式人生 > >Round-robin 輪詢排程詳解

Round-robin 輪詢排程詳解

Round Robin

先來看和他相近的名詞,輪詢排程演算法(Round-Robin Scheduling)

輪詢排程演算法的原理是每一次把來自使用者的請求輪流分配給內部中的伺服器,從1開始,直到N(內部伺服器個數),然後重新開始迴圈。

演算法的優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。

輪詢排程演算法流

  假設有一組伺服器N臺,S = {S1, S2, …, Sn},一個指示變數i表示上一次選擇的伺服器ID。變數 i 被初始化為N-1。其演算法如下:

import java.util.concurrent.atomic.AtomicInteger;


public
class RoundRobin2 { /** * 執行緒安全的 */ private final static AtomicInteger next = new AtomicInteger(0); private int select(int S[]) throws Exception { if (S == null || S.length == 0) throw new Exception("exception"); else { return S[next.getAndIncrement() % S.length]; } } public
static void main(String args[]) throws Exception { int S[] = {0, 1, 2, 3, 4}; RoundRobin2 roundRobin2 = new RoundRobin2(); for (int i = 0; i < 10; i++) { System.out.println(roundRobin2.select(S)); } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

輪詢演算法的缺點

輪詢排程演算法假設所有伺服器的處理效能都相同,不關心每臺伺服器的當前連線數和響應速度。當請求服務間隔時間變化比較大時,輪詢排程演算法容易導致伺服器間的負載不平衡。

所以此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。