问题标签 [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.

0 投票
1 回答
1499 浏览

disruptor-pattern - 在池中使用两层多个处理程序时的破坏者性能问题

我正在尝试使用中断器来处理消息。我需要两个处理阶段。即两组处理程序在这样的工作池中工作(我猜):

使用上面的代码时,如果我在每组中放置一个以上的工人,性能会下降。意味着大量的 CPU 浪费在完全相同的工作量上。

我试图调整环形缓冲区的大小(我已经看到这对性能有影响),但在这种情况下它没有帮助。所以我做错了什么,还是这是一个真正的问题?


我附上了这个问题的完整演示。

尝试在每个组中使用 1 个线程运行上述示例

在我的电脑上它给了

然后用每组4个线程试试

在我的电脑上给了

在运行期间 CPU 的利用率为 100%

0 投票
1 回答
913 浏览

message-queue - 使用多个 LMAX Disruptor

我是 LMAX Disruptor 的新手,我正在探索在需要处理大量流量的多层异步项目中使用它。

向平台发送请求以发送 SMS,清除/检查请求是否存在简单错误并记录下来。

获取和分析与发送 SMS 的客户端相关的各种其他信息,并将其他参数添加到 SMS 信息中。

分析并选择正确的路由路径。然后根据 SMS-info 设置平台特定的协议参数并将其提交给路由器。

像这样,将有接收和处理 SMS 传递以记录、计费、重试和许多其他的流程。在每个阶段,程序流程中都会有并发或顺序执行。如果这是项目的高级视图,是否应使用 LMAX 中断器框架在各个模块之间进行通信(短信信息)?

如果是这样,需要创建多少中断器的右缓冲区?

如果我的理解是正确的,是否在不同的每个层/功能之间创建了新的环形缓冲区?

可以将 POJO 对象写入 ringbuffer 吗?如何将其应用于集群环境?尽管我阅读了一些文档并看过一些有关此框架的视频,但我无法使用此框架可视化解决方案。

任何指南/示例/可视图表/文档或您对此的想法都会对我有很大帮助。

0 投票
2 回答
753 浏览

disruptor-pattern - LMAX Disruptor:必须 EventHandler 克隆从 EventHandler#onEvent 接收的对象

我有一个包含许多生产者和消费者的应用程序。

据我了解,RingBuffer 在 RingBuffer init 开始时创建对象,然后在 Ring 中发布时复制对象并在 EventHandler 中从中获取它们。

我的应用程序 LogHandler 在列表中缓冲接收到的事件,以便在列表达到一定大小后进一步以批处理模式发送。因此 EventHandler#onEvent 将接收到的对象放入列表中,一旦达到大小,它就会在 RMI 中将其发送到服务器并清除它。

我的问题是,我是否需要在放入列表之前克隆对象,据我所知,一旦使用它们就可以重复使用?

我是否需要同步对 EventHandler#onEvent 中列表的访问?

0 投票
1 回答
2055 浏览

java - 在 Java Servlet 中使用中断器并处理多个事件

我在我的 Web 应用程序中使用 LMAX 中断器,它接受 http 请求参数并将它们处理到环形缓冲区。3 个事件处理程序处理和处理数据,最后一个将其保存到数据库中。当 servlet 被实例化时,初始化一次 ringbuffer。这是正确的吗?

在这里,我将值直接放入 ringbuffer

事件处理程序

这是发布到环形缓冲区的正确方法吗?我需要同步“ringBuffer”对象吗?前 2 个事件并行运行,然后是第 3 个事件。当我有快速的发布者和缓慢的消费者时,我应该如何处理这个问题?我正在使用disruptor 3.1.1,我在web 环境中找不到很好的disruptor 使用示例。一个简单的代码实现,如果你做过,会帮助我理解很多!

0 投票
1 回答
2616 浏览

c++ - 在 C++ 中构建 Disruptor 在 autoconf 上给出错误

我从这里下载了中断源:

https://github.com/fsaintjacques/disruptor--

然后我尝试但得到了给定的错误。有什么我想念的吗?

gcc 版本

自动配置版本

0 投票
1 回答
242 浏览

java - 如果 Disruptor 中的 next() 和 publish() 之间抛出异常会发生什么?

如果在使用之间next()publish()使用时抛出异常,Disruptor或者publish()由于其他原因或在可接受的时间内没有被调用,会发生什么?

处理此类情况的恢复/超时技术是什么?

0 投票
1 回答
214 浏览

java - 如何在 Disruptor 中创建自定义事件处理器?

我希望在 Disruptor 中创建一个自定义 EventProcessors,但文档非常少。(https://code.google.com/p/disruptor/wiki/DisruptorWizard)这是怎么做的。它背后的概念是什么,问题和陷阱是什么?

0 投票
0 回答
365 浏览

synchronization - Disruptor,同步机制

当有 N 个生产者和 1 个消费者时,破坏者队列是否提供卓越的性能?我使用 Disruptor Queues 编写了一个包含多个生产者和单个消费者的程序。我发现结果与阻塞 arraybounded 队列并驾齐驱。后者表现更好。我在这里做错了吗?

}

0 投票
2 回答
1201 浏览

java - ByteBuffer.putLong 使用非本地 ByteOrder 快 2 倍

尽管广泛阅读了 JDK 源代码并检查了内在例程,但我还是无法一概而论。

我正在测试清除 a ByteBuffer,分配给allocateDirectusing ByteBuffer.putLong(int index, long value)。根据 JDK 代码,如果缓冲区是“本机字节顺序”,则这会导致单个 8 字节写入,或者字节交换,如果不是,则随后是相同的。

所以我希望本机字节顺序(对我来说是小端)至少与非本机一样快。然而,事实证明,非本机的速度要快约 2 倍。

这是我在 Caliper 0.5x 中的基准:

结果是:

这是一致的。如果我换成putLongputFloat本地订单的速度大约快 4 倍。如果你看看它是如何putLong工作的,它在非本地情况下做了更多的工作:

请注意,unaligned在任何一种情况下都是如此。本机和非本机字节顺序之间的唯一区别是Bits.swap有利于本机情况(小端)。

0 投票
1 回答
84 浏览

java - 扰乱消费者重新提交数据

我想使用 LMAX 的破坏者,但我不确定我的用例是否适合它。基本上有一个或 2 个生产者和 n 个消费者。诀窍是,当消费者接收到一个事件并检查其中的一些数据时,如果它不能立即使用它,它必须重新发布数据(它基本上是一个轮询方案)。我创建了容量我不担心的环形缓冲区太小,但现在我的问题是:请求新序列并从事件处理程序发布是否安全,或者这会以某种方式破坏功能?通过一个小测试,我使这看起来足够安全,但我不知道它在我的特定情况下会如何表现。我担心 onEvent 方法可能会在我请求序列之后但在我更新-> 发布新对象之前被调用,我真的不知道破坏者如何处理这些情况