嗨,
目前我正在开发一个程序,该程序从 amq 队列中获取 2 个值并对它们执行一系列数学计算。在 amq 服务器上创建了一个主题,我的程序通过回调(监听器)订阅和接收消息。
现在,每当消息到达时,都会从 SynchronizedDescriptiveStatistics 对象中取出两个值并将其添加到 SynchronizedDescriptiveStatistics 对象中。每次添加到值列表后,整个计算序列都会重新执行(这实际上是要求的一部分)。
我现在面临的问题是,由于我使用的是监听器,有时在计算过程中会收到一条或多条消息。尽管 SynchronizedDescriptiveStatistics 会自行处理所有与线程相关的问题,但是当它解除锁定或其他情况时,它会立即将所有等待值添加到其数字列表中。虽然我的问题是添加一个值,然后对其执行计算,然后再执行第二个值,等等。
我想出的解决方案是在我的程序中使用作业队列(而不是 amq 队列)。通过这种方式,只要计算结束,程序就会在队列中寻找更多的作业并相应地继续。
因为我也在寻找效率和速度,所以我认为 Disruptor 框架可能对这个问题有好处,并且它针对线程情况进行了优化。但我不确定在我的应用程序中实现 Disruptor 是否值得,因为常规标准队列可能足以满足我的要求。
让我还告诉您,需要执行计算的数据很多,而且会不断出现,并且每次添加一个值时,都需要以连续的方式重新执行整个计算。因此,请记住效率和大量数据,您认为从长远来看会有什么用。
等待答复。 . .
问候。
最佳答案
我将给出这个问题的典型答案:先测试,然后根据结果做出决定。
虽然你说的是效率,但你并没有具体说性能是一个基本要求。如果您对自己的性能要求有所了解,则可以使用队列与 Disruptor 的基本实现来模拟一个简单的原型(prototype),并测量两者的性能。
如果一个明显好于另一个,那就是你的答案。但是,如果需要付出更多的努力来实现,特别是如果它也没有为您提供所需的效率,或者您没有任何严格的性能要求,那么这表明该解决方案不是正确的解决方案。
首先测量,然后根据您的结果做出决定。
关于disruptor-pattern - Java : Use Disruptor or Not . 。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8561703/