问题标签 [lmax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - LMAX Disruptor 可以在 Android 上运行吗?
有人有在 Android 上运行 LMAX Disruptor 的经验吗?它会起作用吗?是否存在兼容性问题?
spring - 使用 Spring Application Context 和 lmax 干扰器配置长期运行过程
我们有一个项目需要长期的过程来检查付款是否已被遵守,如果是这样,记录必须提升到一个新的水平。由于要处理的记录数量巨大,我们决定使用 lmax 中断器。有什么选择?我们可以将 lmax 与 Spring Application Context 集成吗?
disruptor-pattern - 在 LMAX Disruptor 中的后续消费者之间传递数据(从 unmarchaler 到业务逻辑)?
如https://martinfowler.com/articles/lmax.html中所述,我需要先使用 Unmarchaler 处理我的 RingBuffer 事件,然后再使用业务逻辑处理器。假设它的配置如下(https://lmax-exchange.github.io/disruptor/docs/com/lmax/disruptor/dsl/Disruptor.html)
想法是handler1是unmarchaler,handler2消耗handler1处理的东西。
问题:我如何才能准确地编码“unmarchaling 并放回破坏者”部分?我找到了这个https://groups.google.com/forum/#!topic/lmax-disruptor/q6h5HBEBRUk解释,但我不太明白。假设事件到达handler1的回调
(javadoc:https ://lmax-exchange.github.io/disruptor/docs/com/lmax/disruptor/EventHandler.html )
从事件中取消编组一些数据。现在我需要将未编组的数据附加到将处理未编组对象的handler2的事件中。
“更新”事件需要做什么?修改“事件”对象是否足够?
disruptor-pattern - 暂停 lmax 干扰器内部的处理?
我想使用 Lmax Disruptor 进行性能测试:
- 配置 dusruptor
- 不知何故“暂停”处理
- 向 RingBuffer 添加许多消息
- “取消暂停”处理
这样我就可以清楚地测量缓冲区变空的速度。如果我“混合”添加许多消息(这会引入一些延迟)并进行处理,我可能对处理速度的结果不太确定。
但是,我似乎没有在 LMAX Disruptor (https://lmax-exchange.github.io/disruptor/docs/com/lmax/disruptor/dsl/Disruptor.html)中找到“暂停”,有没有办法做一个?
spring - Spring MVC Integration Disruptor时无法获取带有注释@resource的Service bean
代码如下:
公共类 MapEventHandler 实现 EventHandler{
当访问 url "localhost:8080/maptest" 时,会自动生成 bean "visitorMacService"。但是当数据放入ringBuffer时,自动执行“onEvent()”方法,bean“visitorMacService”为空。为什么?有人可以帮忙吗?
Spring 版本:4.0.2 lmax 破坏者版本:3.2.1
disruptor-pattern - LMAX Disruptor 是“最后”还是“最后”?
我正在尝试为 LMAX 中断器编写一个包装器,我想知道是否有一种机制可以添加一个在中断器流程结束时执行的事件处理程序。
有没有办法做到这一点?
java - Lmax Disruptor,许多消费者 - 如何让消费者只接受特定类型的消息并独立进行?
我计划在我的破坏者中拥有许多并行消费者。
我需要每个消费者只消费为他们准备的消息。
例如,我有 A、B、C 类型的消息,并且我有类似的缓冲区
我有每种类型的消费者。对于类型 B - 消息 2,C - 消息 3、5、6,我如何实现 A 的消费者将接收消息 1 和 4?
重要提示:我希望处理是独立的。消费者不应该被链接起来,每个消费者独立地在缓冲区中移动。如果 A 的消费者比 C 慢,“类型 C”消费者对 #6 的处理可能比类型 A 的 #1 更早参与。
我很感激解释如何使用 LMAX 破坏器配置来做到这一点。
java - LMAX Disruptor 依赖图/带有 SequenceBarrier 的门控
目标
我正在尝试在处理程序之间创建一种有点循环的依赖关系,但我无法弄清楚如何正确处理它。我想要实现的是producer -> [handlers 1-3] -> handler 4
.
所以,disruptor.handleEventsWith(h1, h2, h3).then(h4);
。但我有额外的要求
- 虽然处理程序 1-3 确实并行处理消息,但它们都不会开始处理下一条消息,直到它们都完成了前一条消息。
- 在第一条消息之后,处理程序 1-3 等待处理程序 4 在处理下一条消息之前完成最近的消息。
使用单个事件处理程序的等效执行逻辑可以是:
语境
设计上下文是处理程序 1-3 各自根据消息更新自己的状态,并且在三个处理程序中的每一个处理消息后,它们处于一致状态。处理程序 4 然后根据处理程序 1-3 更新的状态运行一些逻辑。所以处理程序 4 应该只看到由 1-3 维护的数据结构的一致状态,这意味着处理程序 1-3 不应该在处理程序 4 完成之前处理下一条消息。
(虽然目标肯定是使用 Disruptor 来管理并发,而不是java.util.Stream
。)
不确定它是否重要,但处理程序 4 的逻辑也可以分为两部分,一个要求不更新处理程序 1-3,下一个只要求处理程序 4 的第一部分已完成。因此,处理程序 1-3 可以在处理程序 4 的第二部分仍在执行时处理消息。
有没有办法做到这一点?或者我的设计有缺陷?我觉得应该有一种方法可以通过SequenceBarrier
但我不太明白如何实现这个自定义屏障。对于处理程序 1-3,我想我想用逻辑做一个障碍handlers[1:3].lastProcessedSequence() == handlers[4].lastProcessedSequence()
,但我不知道该把逻辑放在哪里。
谢谢!
java - 为什么较小的环形缓冲区破坏器速度较慢?
按照Disruptor Getting Started Guide,我构建了一个具有单个生产者和单个消费者的最小破坏者。
制片人
消费者(注意消费者什么都不做onEvent
)
我的目标是性能测试一次绕过一个大的环形缓冲区,而不是多次遍历一个较小的环形。在每种情况下,总操作数 ( bufferSize
X rotations
) 是相同的。我发现随着环形缓冲区变小,操作/秒速率急剧下降。
问题: 当环形缓冲区大小减小但总迭代次数固定时,性能大幅下降的原因是什么? 这种趋势是独立于WaitStrategy
和Single vs MultiProducer
- 吞吐量降低,但趋势是相同的。
主要(通知SingleProducer
和BusySpinWaitStrategy
)
要运行,您需要简单的工厂代码
在核心 i5-2400、12GB 内存、Windows 7 上运行
样本输出
c# - 将一分钟的刻度数据转换为五分钟的 OHLC,而不使用 pandas C#
我从数据馈送(lmax)中获取一次分钟数据(OHLC),我想将其重新采样为五分钟数据,然后再采样十分钟、十五分钟和三十分钟。
我正在使用以下逻辑:
打开=每 5 根蜡烛的第一个值(第一个蜡烛打开)
高 = 5 根蜡烛的最高值
低 = 5 根蜡烛的最低值
关闭=关闭最后一根蜡烛(第 5 根蜡烛)
这是重新采样数据的正确方法吗?我觉得这是合乎逻辑的,但出于某种原因,他们网站上的数据馈送与我的代码之间存在明显差异。我觉得是这种情况,因为我重新采样错了;如果我使用的是 Python,我可以参考 pandas,但不能参考 C#(据我所知)。
这是重新采样数据的函数: