加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

disruptor-pattern – Java:使用Disruptor或不使用Disruptor. .

发布时间:2020-12-15 05:07:32 所属栏目:Java 来源:网络整理
导读:HY, 目前我正在开发一个程序,它从amq队列获取2个值并对它们执行一系列数学计算.已在我的程序订阅的amq服务器上创建了一个主题,并通过回调(侦听器)接收消息. 现在,只要消息到达,就会从SynchronizedDescriptiveStatistics对象中取出并添加两个值.在每次添加到
HY,

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

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

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

我想出的解决方案是在我的程序中使用作业队列(而不是amq队列).通过这种方式,只要计算结束,程序就会在队列中寻找更多的工作并继续相应的工作.

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

我还要告诉你,需要执行计算的数据很多,并且它将继续进行,并且需要在连续方式中每次添加单个值时重复执行整个计算.因此,请记住效率和大量数据,从长远来看,您认为哪些数据有用.

等待回复. . .

问候.

解决方法

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

虽然你谈到效率,但你并没有特别说性能是一个基本要求.如果您对性能要求有所了解,可以使用队列模拟一个简单的原型而不是Disruptor的基本实现,并测量两者的性能.

如果一个人比另一个人好得多,那就是你的答案.但是,如果要付出更多努力,特别是如果它还没有为您提供所需的效率,或者您没有任何硬性能要求,那么这表明解决方案不是正确的.

首先测量,然后根据您的结果决定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读