问题标签 [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 投票
0 回答
125 浏览

java - 未正确设置中断器的事件处理程序

我正在寻找使用破坏者 2.10.4。中断器/环形缓冲区是用户定义类中的属性。出于某种原因,在我看来,我的处理程序没有被调用

更新:Pilot 错误 - 我不相信消息正在发布到环形缓冲区。

0 投票
1 回答
1032 浏览

java - 为什么 Java lmax 中断器在通过 EventProcessors 传递事件时有很大的延迟?

我的项目中有一个环形缓冲区,许多发布者将在其中发布事件(例如 500 个发布者),并且我有 3 个 EventProcessor 应该按顺序处理事件。所有事件都应该以这种方式传递:

{很多发布者} -> {UpStreamProcessor} -> {DownStreamProcessor} -> {logProcessor}

问题是我在 UpStreamProcessor 的发布和启动之间以及 UpStreamProcessor 的结束到 DownStreamProcessor 的启动之间传递事件时浪费了很多时间。

例如,当我有 500 个发布者时,UpStreamProcessor 和 DownStreamProcessor 的处理平均持续 1ms,而 UpStreamProcessor 完成时间到 DownStreamProcessor 开始时间之间持续 400ms。

这是构建环形缓冲区和处理器的代码:

0 投票
1 回答
58 浏览

disruptor-pattern - 哪个 jar 有 com.google.common.event.disuptor.EventDisruptor?

我有一个具有 com.google.common.event.disuptor.EventDisruptor 的项目源,但我找不到有关此的内容。这是来自 disuptor 的吗?

0 投票
2 回答
349 浏览

java - Disruptor:设置启动时的顺序

在事件处理应用程序中,我想记录所有已处理事件的序列号以用于日记目的。这些序列号必须是唯一的,因此在重新启动应用程序时需要检索已使用的最高编号(水印)并确保它为新事件分配更高的编号。

该应用程序使用已经具有序列概念的LMAX Disruptor —— 每个发布到环形缓冲区和从环形缓冲区读取的内容都与一个序列号相关联。但是,该数字会在系统重新启动时重置为 0。有没有办法在启动破坏者之前将初始序列号设置为特定值?

另一种解决方案是使用中断器提供的序列号,并将启动时读取的水印添加到其中,但是必须在需要全局序列号的任何地方执行该操作,所以我更喜欢如果我可以依靠破坏者集中掌握的数字。

0 投票
1 回答
1050 浏览

java - 监控 LMAX Disruptor

如何监控 LMAX Disruptor?假设我有 3 个环形缓冲区,并希望提供一个 ui 来为我提供环形缓冲区的信息。

0 投票
2 回答
559 浏览

java - What in C/C++ is the most suitable close in functionality to collection Disruptor in Java?

Which of the existing collections of data in C/C++ is the most suitable close in functionality to collection(library) Disruptor in Java?

http://lmax-exchange.github.io/disruptor/

The small description:

It is an extremely fast alternative using messaging queues in multithreaded programs. Framework which has "mechanical sympathy" for the hardware it's running on, and that's lock-free. And lots of efforts to avoid lock, CAS, even memory barrier.

Read more about it in the discussion: How does LMAX's disruptor pattern work?

0 投票
1 回答
507 浏览

message-queue - LMAX Disruptor SPSC - 每秒 600 万次操作

使用 Disruptor 环形缓冲区,我每秒只能完成 600 万次操作。我想知道我哪里出错了。我的事件处理程序只是增加了一个计数器。这是单一生产者和单一消费者。有人可以告诉我我是否对语义本身有误。该程序创建一个生产者线程,该线程添加到缓冲区中。并创建一个事件处理程序来处理发布事件。每次发布事件时,事件处理程序都会增加一个 volatile 计数器。

这是程序的输出

共享变量:33554432;运行时间=5094139 微秒;每秒操作数 = 6000000

任何帮助将非常感激。

0 投票
1 回答
470 浏览

multithreading - LMAX Disruptor Timeout EventHandler

我们有一个使用 Disruptor 框架的系统,它有五个注册阶段实现 EvenetHandler。

阶段按顺序工作,因此只有在第一阶段完成后,请求才能移动到第二阶段,这种移动由 Disruptor 内部维护。

我们在第三阶段遇到了问题,这是一个瓶颈,需要花费大量时间,因为它会进行不同的 HTTP 调用并将响应存储在请求对象中。

因此,在第三阶段花费了一段时间后,我们希望将请求(无论它有什么响应)提前到第四和第五阶段。

我如何使任何特定阶段(在这种情况下为第三阶段)超时并强制将请求移至下一阶段?

或者,

有没有办法注册一些在定义的超时后触发的事件,这可能类似于系统级超时?

0 投票
1 回答
343 浏览

.net - 在线程之间传递数据的最快方法

我不是在询问使用后台工作者或线程池或 TPL 的最惯用的方式。

我试图找出使用 .NET 将数据从一个线程传递到另一个线程时最快的方法

我目前正在玩一个带有写索引和读索引的环形缓冲区。这样,除了更新读/写索引的原子操作外,我根本没有任何线程同步。(我不是 100% 确定,但是整数的读取和 ++ 在 .NET 中是原子的,对吗?或者当一个线程读取整数时,整数是否可以在中途被覆盖?)

当涉及到线程间通信时,这是一种合理的方法吗?

我没有将它用于任何真正的项目,我只是想更好地掌握什么有效,什么无效。

[编辑] 好的,我准备公开羞辱:

https://gist.github.com/rogeralsing/8121376

该代码中有多少个漏洞?

0 投票
2 回答
990 浏览

java - 我没有看到 Disruptor 的性能提升

我知道我的问题违背了 Disruptor API 的基本主张。但是当我了解它时,我编写了一个程序来替换我使用 ArrayLinkedBlockingQueue 的 1P-1C 用例。但是当我运行程序时,我一直在使用中断器获得比 ArrayLinkedBlockingQueue 更差的总时间。我一定是做错了什么或测量错了,但我不确定它在我的程序中是什么。有人有意见吗?

(这是一个测试程序,所以显然我的 EventHandler 没有做任何事情)