【问题标题】:Java : Use Disruptor or Not . .Java:使用或不使用 Disruptor。 .
【发布时间】:2011-12-19 12:58:37
【问题描述】:

喂,

目前我正在开发一个程序,该程序从 amq 队列中获取 2 个值并对它们执行一系列数学计算。我的程序订阅并通过回调(侦听器)接收消息的 amq 服务器上创建了一个主题。

现在,只要有消息到达,就会从 SynchronizedDescriptiveStatistics 对象中取出两个值并添加到该对象中。每次添加到值列表后,都会重新执行整个计算序列(这实际上是要求的一部分)。

我现在面临的问题是,由于我使用的是侦听器,因此有时在计算过程中会收到一条或多条消息。尽管 SynchronizedDescriptiveStatistics 自己处理所有与线程相关的问题,但是当它失锁或其他情况时,它会立即将所有等待值添加到其数字列表中。虽然我的问题是添加一个值,然后对其执行 calcls,然后是第二个值,然后继续。

我想出的解决方案是在我的程序中使用作业队列(不是 amq 队列)。这样,每当计算结束时,程序就会在队列中寻找更多的作业并相应地继续。

由于我也在寻找效率和速度,我认为 Disruptor 框架可能对这个问题有好处,并且它针对线程情况进行了优化。但我不确定在我的应用程序中实现 Disruptor 是否值得,因为常规的标准队列可能足以满足我的要求。

我还要告诉您,需要执行计算的数据很多,并且会不断出现,并且每次连续添加单个值都需要重新执行整个计算时尚。因此,请牢记效率和海量数据,您认为从长远来看什么是有用的。

等待回复。 . .

问候。

【问题讨论】:

    标签: disruptor-pattern


    【解决方案1】:

    我将给出这个问题的典型答案:先测试,然后根据结果做出决定。

    虽然您谈论效率,但您并没有具体说性能是一项基本要求。如果您了解自己的性能要求,可以使用队列模拟一个简单的原型,而不是 Disruptor 的基本实现,并测量两者的性能。

    如果一个比另一个好很多,那就是你的答案。但是,如果实施起来要付出更多努力,尤其是如果它也没有为您提供所需的效率,或者您没有任何硬性能要求,那么这表明该解决方案不是正确的。

    先测量,再根据结果决定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2013-02-11
      相关资源
      最近更新 更多