gpt4 book ai didi

jmh - 基准测试结果 ForkJoin vs Disruptor?

转载 作者:行者123 更新时间:2023-12-04 20:39:50 27 4
gpt4 key购买 nike

我已经运行了这个 DisruptovsFJAleskey Shipilev 编写的 Mirco-Benchmarks ,比较 ForkJoin 和 Disruptor 库的性能。

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

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。
有人可以向我解释这些结果吗?谢谢

最佳答案

回答 :

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

备注:

为了获得非常高的性能,环形缓冲区及其内容应该适合 L3 CPU 缓存,以便在线程之间进行交换。如果环形缓冲区用于重放场景,例如市场数据或网络恢复,它可能会更大,并且由于缓存未命中而对性能有明显影响。

Buffer

Sequencer 的作用之一是确保发布不会包装环形缓冲区。要做到这一点,下游消费者的序列都不能低于环缓冲区的序列,减去环缓冲区的大小。然而,使用依赖关系图可以进行有趣的优化
Disruptor with a set of dependent consumers.

enter image description here

------------------- ^ 线程 1 ^ --------------------------- --------------------------------- ^ 主题 2 ^ ----------

enter image description here

友情链接:

Dissecting the Disruptor : What's so special about a ring buffer ?

Disruptor FAQ

The LMAX Architecture

LMAX Disruptor Info Page

Wiki : Circular buffer (Disruptor 不使用指针)

Other Circular buffer wiki

关于jmh - 基准测试结果 ForkJoin vs Disruptor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30569897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com