拥有用于动态机会/概率的简单负载均衡器(在C++中,但语言无关)
Own simple load balancer for dynamic chances / probabilities (in C++ but language undependent)
H_ello可爱的人,
我的程序是作为一个可扩展的网络框架编写的。它由几个作为单独程序运行的组件组成。可以动态添加各个组件的附加实例。
组件最初在一个中央单元注册IP和端口。该管理器定期发送到可以找到其他组件的组件。但不仅如此,每个组件都被分配了一个权重/概率/机会,与其他组件相比,它应该多久处理一次。
例如:1主机,组件A、B、C所有在Master注册的组件,Master发送到A:[B(127.0.0.1:8080,3);C(127.0.0.1:80815)]
A在循环中运行,并根据这些数据反复计算通信伙伴。
因此,A应该以3比5的比例请求B和C。每个请求最终得到的请求数取决于运行性能。这是关于比例的问题。
当然,数字3和5是周期性的,并且是动态变化的。它不是关于3个组件,而是可能的数百个。
我的想法是:
添加3和5。计算一个介于1和8之间的随机数。如果大于3,则取C,否则取B。。。。
但我认为这不是一个干净的解决方案。可能在每个循环中都是计算密集型的。此外,管理和数据结构也很昂贵。此外,我认为STL中的随机数不够平衡。有人能给我一个提示吗,我是如何干净地实现这一点的,或者有人有经验或想法吗?
在任何情况下都要感谢您;)
我有个主意给你:为什么不试试累积概率呢?
1.)生成一个均匀分布的随机数。2.)遍历列表,直到访问元素的累积概率大于随机数。
看看这个(Java代码,但也可以用C++),(你暗示你使用C++非常好!!)
double p = Math.random();
double cumulativeProbability = 0.0;
for (Item item : items) {
cumulativeProbability += item.probability();
if (p <= cumulativeProbability) {
return item;
}
}
相关文章:
- 不同语言中相同代码的不同行为
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- r语言 - C++ 类型为"const std ::?
- 通用C++/Python 多语言的存在
- 为什么我的 EnumWindowProc 不能用 C 语言编译?
- 了解算法的性能差异(如果以不同的编程语言实现)
- Rextester 语言编译C++问题
- 如何将多种语言设置放在单个 .clang 格式文件中
- 不同语言中的模运算符差异
- 刚接触C++,难以理解语言的细微差别
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 我们可以用 C 语言嵌套 #define 和 #if 吗?
- 我的C++语言蛮力算法有问题
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 为什么编程语言被编译为汇编程序而不是二进制?
- QDirIterator语言 - No hasNext not FilePath reaction
- "C.UTF-8" C++ Windows 上的语言环境?
- 了解 cin.fail() 和 cin.clear语言 - Vector 追加程序
- '_HAS_CXX17'宏是否可用于自定义项目标头以启用C++17 语言集功能?
- 有没有办法为macOS上的C++程序指定自定义语言环境目录