去掉处理器信息,多线程保护的测试效果:
http://www.cppblog.com/Files/dede/平衡效果.7zclass loader
{
public:
unsigned long num;
};
class wheelDispatch
{
public:
//注册处理器
void registLoader(loader *l);
//平衡负载调度器,返回被选择的处理器指针
loader *balance(void);
void printLoader(void);
};
main:
srand(time(0));
wheelDispatch wd;
for (int a = 0; a < 10; a++)
{
loader *p= new loader;
wd.registLoader(p);
}
for (int a = 0; a < 10000; a++)
{
loader *p = wd.balance();
++p->num;
//随机
if (rand() > 40000 && p->num > 0) --p->num;
wd.printLoader();
}
输出:
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 0 0 0 0 0 0 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 0 0 0 0 0 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 0 0 0 0 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 0 0 0 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 0 0 1 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 0 1 1 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 0 1 1 1 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 0 1 1 1 1 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
0 1 1 1 1 1 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
1 1 1 1 1 1 1 1 1 1 :负载
0 1 2 3 4 5 6 7 8 9 :序号
1 1 1 1 1 1 1 1 2 1 :负载
大致为1/3出输出:
0 1 2 3 4 5 6 7 8 9 :序号
379 379 380 380 380 379 378 377 376 375 :负载
0 1 2 3 4 5 6 7 8 9 :序号
379 380 380 380 380 379 378 377 376 375 :负载
0 1 2 3 4 5 6 7 8 9 :序号
380 380 380 380 380 379 378 377 376 375 :负载
0 1 2 3 4 5 6 7 8 9 :序号
380 380 380 381 380 379 378 377 376 375 :负载
大致为2/3出输出:
0 1 2 3 4 5 6 7 8 9 :序号
641 643 644 645 646 647 648 649 649 649 :负载
0 1 2 3 4 5 6 7 8 9 :序号
642 643 644 645 646 647 648 649 649 649 :负载
0 1 2 3 4 5 6 7 8 9 :序号
642 643 644 645 646 647 649 649 649 649 :负载
0 1 2 3 4 5 6 7 8 9 :序号
642 643 644 645 646 648 649 649 649 649 :负载
结尾:
0 1 2 3 4 5 6 7 8 9 :序号
996 997 998 1000 1001 1001 1001 1001 1001 1001 :负载
0 1 2 3 4 5 6 7 8 9 :序号
996 997 999 1000 1001 1001 1001 1001 1001 1001 :负载
0 1 2 3 4 5 6 7 8 9 :序号
996 998 999 1000 1001 1001 1001 1001 1001 1001 :负载
0 1 2 3 4 5 6 7 8 9 :序号
997 998 999 1000 1001 1001 1001 1001 1001 1001 :负载