- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经运行了这个 DisruptovsFJ由 Aleskey 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 缓存,以便在线程之间进行交换。如果环形缓冲区用于重放场景,例如市场数据或网络恢复,它可能会更大,并且由于缓存未命中而对性能有明显影响。
Sequencer 的作用之一是确保发布不会包装环形缓冲区。要做到这一点,下游消费者的序列都不能低于环缓冲区的序列,减去环缓冲区的大小。然而,使用依赖关系图可以进行有趣的优化
------------------- ^ 线程 1 ^ --------------------------- --------------------------------- ^ 主题 2 ^ ----------
友情链接:
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/
由于 RingBuffer 预先分配给定类型的对象,如何使用单个环形缓冲区来处理各种不同类型的消息? 您不能创建新的对象实例来插入到 ringBuffer 中,这会破坏预先分配的目的。 因此,您可以在
Disruptor 是否应该仅用于 POD 数据类型? 我的意思是应该Disruptor仅用于 T取值如 byte[], int[], etc ? 我的疑问是,如果我们使用 T其中有 Object引用
我有以下关于干扰器的问题: 消费者(事件处理器)没有实现他们实现的 EventHandler 的任何 Callable 或 Runnable 接口(interface),那么他们如何并行运行,例如,我
我有以下关于干扰器的问题: 消费者(事件处理器)没有实现他们实现的 EventHandler 的任何 Callable 或 Runnable 接口(interface),那么他们如何并行运行,例如,我
我们在生产中使用 LMAX Disruptor 已经将近一年了。一切都很好,直到上周我们看到 Disruptor 丢弃了消息。我们的 Disruptor 结构非常简单: Kafka -> RingBu
嗨, 目前我正在开发一个程序,它从 amq 队列中获取 2 个值并对它们执行一系列数学计算。在我的程序订阅并通过回调(监听器)接收消息的 amq 服务器上创建了一个主题。 现在,每当消息到达时,这两个
我们有一个具有固定长度数组的 Disruptor 实现。是否有可能实现一个不依赖于此数组的模式版本,而是包含(可能是自描述的)可变长度对象列表。例如,Protobuf 对象的 Ringbuffer?
前言 Disruptor是一个高性能的无锁并发框架,其主要应用场景是在高并发、低延迟的系统中,如金融领域的交易系统,游戏服务器等。其优点就是非常快,号称能支撑每秒600万订单。需要注意的是,D
前言 Disruptor的高性能,是多种技术结合以及本身架构的结果。本文主要讲源码,涉及到的相关知识点需要读者自行去了解,以下列出: 锁和CAS 伪共享和缓存行 v
Q1) 熟悉 Java Disruptor 模式的人是否知道他们对结果进行基准测试的消息大小?我正在编写一个类似的系统(出于纯粹的兴趣),当我阅读他们的测试描述时,没有提到发送的消息大小? http:
在disruptor(版本3.3.2)中,每个事件都是一个Runnable(因为EventProcessor扩展了runnable)。 我正在编写一个应用程序,每当EventHandler抛出异常时,
我正在研究LMAX Disruptor的源代码,我进入了RingBuffer抽象类。为什么 RingBufferPad 中正好有 7 个长字段 (p1 ... p7)?这是实际代码: https://
本文整理了Java中com.lmax.disruptor.YieldingWaitStrategy类的一些代码示例,展示了YieldingWaitStrategy类的具体用法。这些代码示例主要来源于G
我对 LMAX Disruptor 的理解它是一个 JAR,充满了速度惊人、并发的 Java 代码,每秒可实现 2000 万条消息的吞吐量(如果使用正确)。 我们目前的 ActiveMQ 实例对于我们
我正在使用 Disruptor-net在 C# 应用程序中。我在理解如何在破坏者模式中执行异步操作时遇到了一些困难。 假设我有几个事件处理程序,并且链中的最后一个将消息传递给我的业务逻辑处理器,我如何
有什么办法可以在一个结构中同时拥有这两种功能 - BlockingQueue 的语义,即非阻塞 peek、阻塞 poll 和阻塞 put。多个提供者一个消费者。 RingBuffer,它有效地充当对象
我正在使用 Disruptor-net在 C# 应用程序中。我在理解如何在破坏者模式中执行异步操作时遇到了一些困难。 假设我有几个事件处理程序,并且链中的最后一个将消息传递给我的业务逻辑处理器,我如何
我需要从 mongodb 存储和获取大量数据,所以我被要求使用 lmax Disruptor 接收和存储数据,我已经花了几天时间在 lmax github 帐户上寻找一个简单的教程,但我不太明白如何将
Disruptor github地址为:https://github.com/LMAX-Exchange/disruptor 我有一个简单的测试如下: public class DisruptorMa
我最近一直在学习 LMAX Disruptor 并进行了一些实验。令我困惑的一件事是 EventHandler 的 onEvent 处理程序方法的 endOfBatch 参数。考虑我的以下代码。首先,
我是一名优秀的程序员,十分优秀!