问题标签 [disruptor-pattern]
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.
disruptor-pattern - 消费者如何回发到同一个 Disruptor 环形缓冲区
在多生产者设置中,有一个生产者线程和一个消费者线程。消费者可以将新事件发布回同一个环形缓冲区吗?我假设它在缓冲区已满时中断,并且消费者线程在处理当前事件时永远不会获得空闲插槽。换句话说,死锁发生了。
做这个的最好方式是什么?我是否必须引入一种代理线程,它从消费者那里接收事件并将它们像普通生产者一样发布到环形缓冲区?
补充 - 为什么有用? 假设消费者线程正在处理股票市场数据事件,它需要向市场模拟器(一个类)发送订单,理想情况下,市场模拟器应该将订单执行事件发送到同一个环形缓冲区。
java - 如何使用中断器实现自定义演员邮箱?
我对LMAX Disruptor有一些经验,我真的很想使用 Disruptor 实现一个自定义演员邮箱。
有什么指导方针吗?甚至可能吗?Akka的actor邮箱有什么限制?
buffer - 具有拉取偶数处理程序的破坏者模式
我将通过引入破坏者模式来提高现有解决方案的性能。现有解决方案包含具有共享字节缓冲区的单个生产者和消费者。在这种情况下,生产者将数据推送到共享缓冲区,消费者从缓冲区中提取数据,但破坏者模式不支持拉事件处理程序。Disruptor 事件处理程序由 Disruptor 框架自动触发。有什么建议么?
disruptor-pattern - 消费者可以将事件发布到同一个环形缓冲区吗?
当然可以。但是,这是否正确使用了 Disruptor 模式?
我的消费者为下一个消费者准备了一些数据。据我所知,我可以组织第二个消费者等待第一个消费者。但是如何在它们之间传递计算数据呢?
提前感谢大家!
java - 如何找到 Lmax Disruptor 钻石(一个生产者 5 消费者 1 结论)示例?
我发现github上Lmax Disrupter的用户指南很简单,现在我有一个生产者和五个消费者的问题,之后我需要总结消费者的结果,有没有演示,如何找到Lmax Disruptor diamond (一个生产者5个消费者1个结论)例子?
非常感谢!
java - 是什么导致了这种性能下降?
我正在使用 Disruptor 框架对某些数据执行快速的 Reed-Solomon 纠错。这是我的设置:
- 生产者将 2064 字节的块从磁盘读取到字节缓冲区中。
- 8 个 RS 解码器消费者并行执行 Reed-Solomon 纠错。
- 消费者将文件写入磁盘。
在破坏者 DSL 术语中,设置如下所示:
当我没有磁盘输出消费者(无.then(writerHandler)
部分)时,测量的吞吐量为 80 M/s,只要我添加消费者,即使它写入/dev/null
,甚至不写入,但它被声明为依赖消费者,性能下降到 50-65 M/s。
我已经使用 Oracle Mission Control 对其进行了分析,这就是 CPU 使用率图表显示的内容:
没有额外的消费者:
有一个额外的消费者:
图中这个灰色部分是什么?它来自哪里?我想它与线程同步有关,但我在任务控制中找不到任何其他统计数据可以表明任何此类延迟或争用。
multithreading - 发生异常时,Disruptor 停放/停止多个 EventHandler
当我们的一个 EventHandler 发生故障时,我们遇到了 CPU 使用率过高的情况。
假设我们有几个消费者 ( EventHanlders
),它们被配置为在缓冲区上按顺序运行。如果第一个 EventHandler 抛出异常,是否有办法停止(并稍后唤醒它们)所有其他 EventHandler。
我们正在做的是让失败的线程进入睡眠状态,然后我们再次尝试使用相同的事件。但是我们注意到,RingBuffer
即使没有要读取的事件,其他线程也会继续运行并尝试读取,从而将 CPU 提高到可接受的水平。
目前我放弃这是因为WaitStrategy
,disruptor
因为在正常条件下按预期工作。我们正在使用BlockingWaitStrategy
那里。
为了示例的更多解释
其中 INPUT 是从 轮询的事件RingBuffer
,A、B、C 和 D 是按顺序执行的不同 EventHandler。A* 是引发异常的消费者。
我们想要实现的是,当消费者 A 无法消费事件时(例如,发生异常后),该消费者的 OnEvent(...) 方法不会退出,而是会停留在循环中,并定期休眠尝试再次消费唤醒时的相同事件。与此同时,所有其他消费者都应该停车或睡觉,直到 A 成功。
我们正在使用破坏者版本 3.3.0。
我一直在谷歌搜索,但还没有找到可行的解决方案。
提前致谢。
萨尔瓦。
apache-storm - Apache Storm 和 LMAX Disruptor 的区别
Apache Storm 和 LMAX Disruptor 之间的对比差异是什么?两者都在解决不同的问题吗?如果是这样,它们是什么?我学习了Apache Storm
几天,我发现它与 LMAX Disruptor 有一些相似之处。尽管 LMAX Disruptor 用于在线程之间传递消息,但对数据执行某些处理的事件被链接在一起(如树、菱形、三角形、简单序列)。同样,Storm与对数据执行某些处理的Spouts
多个链接在一起Bolts
,数据从一个 Bolt 传递到另一个 Bolt,直到没有更多的 Bolt。这与 LMAX Disruptor 不相似还是我看错了?除此之外,Apache Storm 也能在 LMAX Disruptor 等海量数据上执行得更快吗?
java - Lmax Disruptor 中执行器服务的使用
我正在评估用于数据处理应用程序平台的 Disruptor 库。具体来说,我会针对 Akka 演员框架和纯 Java 执行器服务进行评估,以适应我们的问题领域。
为了实例化一个新的 Disruptor(队列,我应该说?),我们需要提供一个 ExecutorService 实例(v3.3.2)。当我检查 Disruptor 的示例代码时,几乎在所有情况下我都看到缓存的线程池正在被传递。我有一个单一的消费者(EventHandler)场景。在这种情况下,如果我使用单线程执行器有什么区别吗?
java - 用单线程 LMAX 编写
我已经了解了 LMAX 和这个名为 RingBuffer 的奇妙概念。所以人们说,当只有一个线程写入环形缓冲区时,性能比多个生产者要好得多......
但是,我真的不认为典型应用程序可以仅使用一个线程在 ringbuffer 上写入...我真的不明白 lmax 是如何做到的(如果他们这样做的话)。例如N个不同的交易者在交易所下订单,这些都是异步请求,正在转换为订单并放入ringbuffer,他们怎么可能用一个线程写这些?
问题 1. 我可能会遗漏某些内容或误解某些方面,但是如果您有 N 个并发生产者,如何将它们合并为 1 而不相互锁定?
问题 2。我记得 rxJava 可观察对象,您可以在其中获取 N 个可观察对象并使用Observable.merge将它们合并为 1我想知道它是否以任何方式阻塞或维护任何锁定?