博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无连续重复的随机算法
阅读量:6576 次
发布时间:2019-06-24

本文共 615 字,大约阅读时间需要 2 分钟。

  在开发中需要用到后台多台机器的任务分配,最简单的方式当然是轮询,建立一个闭环就可以实现一直轮询。这里我想用一个随机算法,这样对于不同机器有权重就可以更方便的控制。但是会存在一定概率连续选择一个机器,这样会造成系统瞬间负载很高,所以我想做一个简单的随机算法能不连续选择一个值,这样最坏的情况也是单节点50%的总负载。

  最简单的随机,就是给你一个长度为size的list数组,你每次选取list[(int) (size*random)]就可以了。

  但我的想法和轮询的思路更接近,我们同样把数值视为闭环,为了防止下次会选择上一次的节点,那么每次选取就从上一次选中节点的下一个开始,随机步长为(size - 1) * random,这样就在上一次节点上加上这个随机步长即可。最后这个公式就是list[lastindex + 1 + (int) ((size - 1) * random)]。

  如果需要对不同机器设置权重,就可以对每个节点的数值范围加大,比如节点1权重是10,节点2权重是5,那么节点1的值域就是1到10,节点2的值域就是11到15,然后随机就从1到15之间取即可。

 其实这个小算法主要是开拓一下思路,但是也不能避免瞬间负载很高的情况,只能算是对简单随机的一种粗略优化。

本文转自passover 51CTO博客,原文链接:http://blog.51cto.com/passover/521680,如需转载请自行联系原作者

你可能感兴趣的文章
C++编程中const和#define的区别
查看>>
LightOJ 1245(Harmonic Number (II))
查看>>
小知识记录
查看>>
109. Convert Sorted List to Binary Search Tree
查看>>
玩转HTML5移动页面
查看>>
Please review your Gradle project setup in the android/ folde
查看>>
带左右按钮、 渐隐渐现 轮播图
查看>>
body标签中的相关标签
查看>>
css3 animate 和关键帧 @-webkit-keyframes
查看>>
指向结构体变量的指针变量
查看>>
文字链接颜色设置
查看>>
ChannelHandler揭秘(Netty源码死磕5)
查看>>
图片转流
查看>>
常见幻灯片实现
查看>>
ubunto应用软件
查看>>
wireshark----教你如何抓包
查看>>
从txt中读入数据到数组中(fscanf)
查看>>
jquery中的事件与动画
查看>>
[转][ASP.NET MVC 小牛之路]12 - Section、Partial View 和 Child Action
查看>>
iOS UIImage扩展方法(category):放大、旋转、合并UIImage、增加渐变层、添加阴影、调节透明度、保存到相......
查看>>