开发者社区 > 云原生 > 正文

[代码讨论]在均匀分布的消息逻辑中使用线程局部变量?

rocketmq/client/src/main/java/org/apache/rocketmq/client/common/ThreadLocalIndex.java

Lines 23 to 35 in 81e3648

private final ThreadLocal threadLocalIndex = new ThreadLocal<>(); private final Random random = new Random(); private final static int POSITIVE_MASK = 0x7FFFFFFF;

public int incrementAndGet() { Integer index = this.threadLocalIndex.get(); if (null == index) { index = random.nextInt(); } this.threadLocalIndex.set(++index); return Math.abs(index & POSITIVE_MASK); }

这个threadLocal变量threadLocalIndex用于许多地方,用于均匀分布消息。

IMO,我认为线程局部变量可能不是一个好主意,全局变量(或类变量)应该更适合确保消息在全局均匀分布。

threadlocal变量将没有问题,特别是当分发大量消息时,结果消息将均匀分布。但是,当消息数量较小,消息队列稍大时,可能会看到消息分布不均。

提问11.png

我不太熟悉distribution逻辑,所以如果我错了,请纠正我。

原提问者GitHub用户xiaoyifang

展开
收起
芬奇福贵 2023-05-26 10:12:27 99 0
1 条回答
写回答
取消 提交回答
  • 当消息数量较低时,这确实是不均衡的分布。但这并不重要。国际海事组织表示,只有大量信息的分布不均才会对消费产生影响。与复杂一致性逻辑的绝对平衡相比,以更低的成本实现最终平衡可能是更好的选择。

    原回答者GitHub用户ShadowySpirits

    2023-05-26 16:44:44
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载