首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ForkJoin对Disruptor的基准结果?

ForkJoin对Disruptor的基准结果?
EN

Stack Overflow用户
提问于 2015-06-01 09:24:26
回答 1查看 688关注 0票数 4

我已经运行了由Aleskey Shipilev编写的这个Aleskey Shipilev镜像基准测试,其中比较了ForkJoin和Disruptor库的性能。

我在Linux平台i5上使用JDK1.8.40的结果如下:

代码语言:javascript
复制
Benchmark                     Score,     Score Error (99.9%),Unit,Param: slicesK,

Disruptor.run,              939.801405,   20.741961,ms/op,   50000,0,10
ForkJoin.run,               1175.263451,  0.595711, ms/op,   50000,0,10
ForkJoinRecursive.run       771.854028,   26.022542,ms/op,   50000,0,10
ForkJoinRecursiveDeep.run,  1356.697011,  28.666325,ms/op,   50000,0,10
ForkJoinReuse.run,          7974.180793,  49.604539,ms/op,   50000,0,10 

slicesK < 50000的第一部分结果是预期的,因为Disruptor使用的是一个RingBuffer和一种机制,使得它在并发上下文中效率更高。

现在,当slicesK >= 50000时,Disruptor测试的性能不如ForkJoinRecursiveDeep和ForkJoinReuse。有人能给我解释一下这些结果吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-14 05:45:43

答:

在slicesK >= 50000中,您的Disruptor可用环缓冲区不知何故已满,这会导致性能下降。

备注:

为了获得很高的性能,环缓冲区及其内容应该适合在L3 CPU缓存中进行线程间的交换。如果环形缓冲区用于重放场景(如市场数据或网络恢复),则可能会更大,并从缓存丢失中产生明显的性能影响。

Sequencer的角色之一是确保发布不包装环形缓冲区。要做到这一点,下游使用者中没有一个序列可能低于环形缓冲区的序列,小于环形缓冲区的大小。然而,使用依赖关系图可以进行有趣的优化。

链接:

解剖者:环形缓冲器有什么特别之处?

干扰物常见问题

LMAX体系结构

LMAX Disruptor信息页面

Wiki :循环缓冲区 (Disruptor不使用指针)

其他循环缓冲wiki

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30569897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档