使用循环算法调度负载?

Nev*_*hai 7 c# round-robin

我需要编写一个循环算法来计划加载到n个端点?

所以,如果我有服务器A,B和C.

我想确保为我得到的每个请求循环遍历它们.我如何在C#中执行此操作?

kem*_*002 21

只是为了记录,循环的定义:

http://en.wikipedia.org/wiki/Round-robin_scheduling

只需使用队列.取一个顶部,使用它并把它放回去.这确保了最近使用的一个将始终是最后一个被拾取的.

Queue<Server> q = new Queue<Server>();

//get the next one up
Server s = q.DeQueue();


//Use s;


//put s back for later use.
q.Enqueue(s);
Run Code Online (Sandbox Code Playgroud)

链接到队列类:

http://msdn.microsoft.com/en-us/library/7977ey2c.aspx

  • 使用此模式时,在使用它之前立即将服务器入队(或将enqueue放入finally块中)可能是值得的.这样,在"使用"服务器期间抛出的任何异常都不会导致服务器完全从轮换中删除. (3认同)
  • 它一直用于服务器负载分配. (2认同)

Jos*_*son 7

与ebpower相同的想法,但关注的是下一个项目是什么,而不是下一个项目的索引.

public class RoundRobinList<T>
{
    private readonly IList<T> _list;
    private readonly int _size;
    private int _position;

    public RoundRobinList(IList<T> list)
    {
        if (!list.Any())
            throw new NullReferenceException("list");

        _list = new List<T>(list);
        _size = _list.Count;            
    }

    public T Next()
    {
        if (_size == 1)
            return _list[0];

        Interlocked.Increment(ref _position);
        var mod = _position % _size;
        return _list[mod];
    }
}
Run Code Online (Sandbox Code Playgroud)