问题标签 [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.
java - 如何在真实的金融应用程序中集成 LMAX
我也在考虑将破坏者模式集成到我们的应用程序中。在开始使用破坏者之前,我对一些事情有点不确定
- 我有 3 个生产者,主要是一个反序列化请求的 FIX 线程。另一个随着市场变化不断修改订单价格的线程。此外,我们还有一个线程负责反序列化从 GUI 应用程序发送的请求。所有三个线程当前都写入阻塞队列(因此我们看到队列上有很多争用)
- 颠覆者谈到了单一作者原则,从我读到的内容来看,这种方法的规模最好。有什么办法可以让上述三个线程遵守单写原则?
- 同样在典型的请求/响应应用程序中,特别是在我们的案例中,我们在内存缓存中存在争用,因为当我们使用响应更新缓存时,我们需要锁定缓存,而请求可能针对相同的顺序发生。我们如何通过破坏者处理这个问题,即我如何绑定对特定请求的响应?如果可以,我可以消除缓存上的锁定吗?
任何建议/指针将不胜感激。我们目前使用的是 Java 1.6
timeout - 如何将超时功能应用于 LMAX Disruptor Queue?
致 LMAX Disruptor http://code.google.com/p/disruptor/的开发者/用户:
我的问题:谁能建议一种方法来将超时功能应用于 Disruptor,例如使用 EventHandler?
这是我的工作中出现的一种情况:
- 发件箱 - 通过网络发送到服务器的消息
- 收件箱 - 从服务器收到的 ACK 消息
- ACK Handler - 将发件箱消息标记为 ACKed
- 超时处理程序 - 将发件箱消息标记为 NACK(非常需要,但它在哪里可以适合 Disruptor 设计?)
有没有人有相同的看法?或者任何人都可以指出为什么它是不必要的。我希望接下来的辩论会很简短。
谢谢你。
java - 这个 java 应用程序如何在不扩展线程或实现可运行的情况下运行多个线程?
我正在学习 Java,并且能够使用 runnable 对我现有的应用程序进行一些多线程处理。我现在正在查看中断器(在线程之间共享变量),但我无法弄清楚作者实际上是如何产生线程的。
我看到他正在使用 Executor,我用它在我的程序中提交可运行的类,但在这个例子中没有提交(或可运行)。我只从 Oracle 教程中学到了我所知道的知识,他们提到唯一的两种方法是扩展线程或实现可运行(我在这里都没有看到,但他确实将执行程序提交给了中断器,这可能是他如何处理线程?)。我错过了什么还是这个人以不同的方式做这件事?我的最终目标是理解这段代码(它工作得很好),所以我可以将它应用到我现有的(使用可运行的)代码中。
这是有问题的代码:
更新:如果 Disruptor 正在处理线程的产生,那么我如何将现有的可运行类提交给它?还是我需要再次修改代码?抱歉,我对中断器是否要使用现有代码或者我是否需要完全改变我的东西感到有点困惑。
java - 破坏者还是 JMS?
破坏者实际上是应用程序而不是 JMS 的替代品吗?我目前使用 JMS 消息传输任务。
破坏者是否打算替换它以进行消息传输?每个人的优点/缺点是什么?
目前我使用 JMS,我有一个将消息发送到队列的生产者和将消息从队列中拉出的消费者 (MDB)。
谢谢。
java - 破坏者 helloworld 示例
我想学习Disruptor 框架。谁能给我一个可以用Java程序语言在main方法中运行的helloworld示例?
java - Java Disruptor 模式和低延迟
Q1) 熟悉 Java Disruptor 模式的人是否知道他们对结果进行基准测试的消息的大小?我正在编写一个类似的系统(出于纯粹的兴趣),当我阅读他们的测试描述时,没有提到发送的消息大小?
http://code.google.com/p/disruptor/wiki/PerformanceResults
Q2) 计算机之间的通信或进程间通信的破坏者是什么?我最初的印象是计算机到计算机,但他们的工作被标记为“线程间”消息传递库?
multithreading - 具有可变持续时间“业务逻辑”的破坏者模式
如何在存在可变持续时间“业务逻辑”任务的流程中有效地使用破坏者?以前做过吗?
可以通过处理响应阶段的第二个环形缓冲区来完成吗?如果是这样,我该怎么做。
我了解 Disruptor 并看到了我的调用链的一些特定部分,我可以在其中应用这个概念。具体来说,该应用程序是一个中间件类型的应用程序,它执行以下步骤:
- 阅读入站消息,解组请求
- 确定请求的客户详细信息,确定要处理的工作流程步骤
- 调用后端系统执行步骤
- 整理响应、记录响应、编组并返回给消费者
问题是后端步骤的某些实例可能需要“较长”时间,这可能会迫使短期运行任务的响应阶段等待较长时间运行的任务。假设后端系统的调用可以异步或同步完成 - 所以这个想法是后端系统调用只是一个触发后端异步请求的消费者。
后端系统响应时间可以从 5 毫秒(一些请求)、50 毫秒(90% 的请求)到 - 5000 毫秒(1% 的请求)(想想大型磁盘 I/O)。
我可以看到 Disruptor 具有潜在的高效性,但无法绕过这个障碍来降低平均延迟。
shared - LMAX 的 Disruptor 如何与具有共享变量的多个生产者一起工作?
我是 Disruptor 的新手。我有以下两个查询:
Q1。我得到了一个生产者对一个消费者和一个生产者对多个依赖消费者的示例代码,
我喜欢为多个生产者或多个消费者或定序器获取示例代码:3P – 1C。您能否向我推荐任何博客或代码示例?
Q2。这是一个关于在多生产者环境中的通用问题,一个生产者结果将如何与环形缓冲区中先前生产者的结果相互关联。
例如:Is Disruptor 可以在多个生产者更新单个文件/变量的环境中使用。即有两个生产者(P1,P2),它们正在更新一个共享变量(命名为“count”)。(这里的count是ValueEvent类中的一个实例变量)
最初,“计数”值为 0。
生产者 P1 会将“计数”当前值加 1。所以生产者 P1 处理后,count 的值将是 (0+1) = 1。
生产者 P2 会将“count”当前值加 2,因此生产者 P2 处理后,count 的值将是 (1+2) = 3。
基本上,P2 需要从环形缓冲区读取更新的“计数”值(由 P1 完成)并添加增量值(2)。
我们如何维护生产者的执行顺序?(P2总是在P1执行之后执行。)
在消费者端,消费者 (C1,C2) 将按顺序读取“计数”值 (1,3,.,.,.)。这没关系,就像在环形缓冲区中一样,每个消费者将仅按顺序读取环形缓冲区值。
谢谢,普拉森吉特。
c - LMAX 中断队列的高性能替代方案是什么?
我正在对 Disruptor Queues 的内部 C 实现进行性能测试,我很想对非线程事件流处理的其他类似方法进行基准测试。谷歌上的内容很少,因此非常感谢任何指针或建议。
consumer - LMAX Disruptor模式中消费者(eventProcessor)慢问题的解决方案
在使用中断器时,可能会有一个或多个消费者落后,并且由于消费者速度慢,整个应用程序都会受到影响。
请记住,每个生产者(发布者)和消费者(事件处理器)都在一个线程上运行,那么解决消费者缓慢问题的方法是什么?
我们可以在单个消费者上使用多个线程吗?如果没有,有什么更好的选择?