- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Disruptor 是否应该仅用于 POD 数据类型?
我的意思是应该Disruptor<T>
仅用于 T
取值如 byte[], int[], etc
?
我的疑问是,如果我们使用 T
其中有 Object
引用作为其成员变量,我们需要 new
那些将位于堆上的成员变量。
这将再次导致缓存未命中,因为成员变量可能位于堆的完全独立的部分。
我的想法是正确的Disruptor<T>
应该只用于 T
属于普通旧数据类型(POD)的集合?
问候,
维马尔
更新:其他人可以看看这个问题吗?
更新2:
回复@Trisha
嗨特丽莎,
问候。
我看到了你提到的链接。com.lmax.ticketing.api.Message
继承自 javolution.io.Struct
并由 javolution.io.Struct
中的元素组成和 javolution.io.Union
这使得 Message
可以在 C/C++
之间进行互操作
对于任何继承自 javolution.io.Struct/Union
的类内存布局由 Struct/Union
的初始化顺序定义。的成员并遵循与 C/C++
相同的 wordSize 规则结构。
因此,本质上,您可以控制放入 Disruptor
中的元素的内存布局。 .以及 Message
的所有成员和子成员是固定大小的,即没有任何动态内存(java.lang.Object
)
这也正是我的观点,我们应该使用我们可以控制内存布局并且没有任何动态内存的元素。这样做是为了最大限度地减少缓存未命中。
假设,如果消息的一部分是,比如说,java.lang.String
,我们不知道 JIT 编译器会将那个字符串放在哪里。如果我正在访问 Message.String
在一个 EventHandler
这可能导致缓存未命中,因为字符串可能存在于完全不同的内存块中。
我对吗?
最佳答案
您可以使用任何类型的对象作为事件,例如,参见 https://github.com/mikeb01/ticketing 处的代码(例如 com.lmax.ticketing.web.RequestServlet) - 这使用 Message
作为 RingBuffer
中的对象.RingBuffer
使用 EventFactory
预先填充了这些事件当您调用 Disruptor
时提供构造函数。因此,您只需在创建 RingBuffer
时创建它们的新实例,并且您可以在 Disruptor
的整个生命周期中重复使用它们.同样,您可以在上述项目中看到一个示例。
关于disruptor-pattern - java : Disruptor: Should Disruptor be used only for POD datatypes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9327825/
由于 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 参数。考虑我的以下代码。首先,
我是一名优秀的程序员,十分优秀!