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

concurrency - LMAX 的破坏者模式如何运作?

我试图理解破坏者模式。我看过 InfoQ 的视频并尝试阅读他们的论文。我知道涉及到一个环形缓冲区,它被初始化为一个非常大的数组以利用缓存局部性,消除新内存的分配。

听起来好像有一个或多个原子整数可以跟踪位置。每个“事件”似乎都有一个唯一的 id,并且它在环中的位置是通过找到它相对于环的大小等的模数来找到的。

不幸的是,我对它的工作原理没有直观的感觉。我做过很多交易应用,研究过actor模型,研究过SEDA等。

在他们的演讲中,他们提到这种模式基本上就是路由器的工作方式。但是我也没有找到关于路由器如何工作的任何好的描述。

是否有一些好的指示可以更好地解释?

0 投票
3 回答
9116 浏览

disruptor-pattern - 应该如何使用 Disruptor(Disruptor Pattern)来构建现实世界的消息系统?

由于 RingBuffer 预先分配给定类型的对象,如何使用单个环形缓冲区来处理各种不同类型的消息?

您不能创建新的对象实例来插入到 ringBuffer 中,这会破坏预先分配的目的。

因此,您可以在异步消息传递模式中有 3 条消息:

  1. 新订单请求
  2. 新订单已创建
  3. 新订单被拒绝

所以我的问题是你打算如何将 Disruptor 模式用于现实世界的消息系统?

谢谢

链接: http ://code.google.com/p/disruptor-net/wiki/CodeExamples

http://code.google.com/p/disruptor-net

http://code.google.com/p/disruptor

0 投票
3 回答
10186 浏览

c++ - LMAX 的颠覆者模式:有 C++ 的端口吗?

LMAX 的 Disruptor 模式有开源Java.NET版本,如视频LMAX - How to Do 100K TPS at Less than 1ms Latency中所述。这里有更多关于 Disruptor 模式信息的链接

是否有人知道将Disruptor 模式移植到 C++ 的端口,无论是已完成还是处于测试阶段?

更新

显然,其他人正在呼吁使用Disruptor 模式的 C++ 版本。

0 投票
1 回答
906 浏览

java - Java Future.get() 不返回

从下面的代码或ValueMutationEventHandler,为什么我不能做 future2.get(),等待 future2 完成然后得到结果?

如果我执行 future2.get(),它将永远等待。

0 投票
1 回答
1667 浏览

c# - LMAX Disruptor 可以移植到 C# 吗?

我知道有些人正在开发 C++ 端口。

可以使用 C# 端口吗?特别是,我正在考虑 volatile 字段在 C# 中只有 32 位的限制。如果这是唯一的问题,那么是否值得将环形缓冲区写入仅具有 32 位允许的插槽数。这比系统生命周期中的事件要少得多。我有这个权利吗?我们可以在某个时候回滚到 0 吗?

先感谢您。

0 投票
3 回答
2406 浏览

java - Disruptor - 未调用事件处理程序

我正在使用Disruptor框架,发现我的事件处理程序没有被调用。

这是我的设置代码:

在其他地方,我发布活动。我已经尝试了以下两种方法:

事件发布方式A:

在这种情况下,我发现第一个EventHandler被调用,但除此之外再也没有。

事件发布方式 B:

在这种情况下,我发现根本没有调用任何事件处理程序。

我究竟做错了什么?

更新

这是我的完整事件处理程序。我应该如何发出处理完成的信号?

0 投票
1 回答
1241 浏览

disruptor-pattern - Java:使用或不使用 Disruptor。.

嗨,

目前我正在开发一个程序,该程序从 amq 队列中获取 2 个值并对它们执行一系列数学计算。我的程序订阅并通过回调(侦听器)接收消息的 amq 服务器上创建了一个主题。

现在,每当消息到达时,这两个值就会被取出并添加到 SynchronizedDescriptiveStatistics 对象中。在每次添加到值列表之后,整个计算序列都会重新执行(这实际上是要求的一部分)。

我现在面临的问题是,由于我使用的是侦听器,因此有时在计算过程中会收到一条或多条消息。尽管 SynchronizedDescriptiveStatistics 自己处理所有与线程相关的问题,但是当它失锁或其他情况时,它会立即将所有等待值添加到其数字列表中。虽然我的问题是添加一个值,然后对其执行 calcls,然后是第二个值,然后不断地执行。

我想出的解决方案是在我的程序中使用作业队列(不是 amq 队列)。这样,每当计算结束时,程序就会在队列中寻找更多的作业并相应地继续。

由于我也在寻找效率和速度,我认为 Disruptor 框架可能对这个问题有好处,并且它针对线程情况进行了优化。但我不确定在我的应用程序中实现 Disruptor 是否值得,因为常规的标准队列可能足以满足我想要做的事情。

让我还告诉您,需要执行计算的数据很多,并且会不断出现,并且每次添加单个值时都需要以连续方式重新执行整个计算。因此,请牢记效率和海量数据,您认为从长远来看什么是有用的。

等待答复。. .

问候。

0 投票
2 回答
13800 浏览

c# - Disruptor.NET 示例

我正在尝试学习如何使用 Disruptor.NET 消息传递框架,但找不到任何实际示例。那里有很多文章,其中包含有关其工作原理的图片,但是我找不到任何实际去向您展示如何实现这些方法的地方。什么是一个例子?

0 投票
5 回答
25738 浏览

java - LMAX Disruptor 最简单实际的示例代码

我希望我能得到最简单的示例代码,它将展示如何使用 LMAX 中断器(http://code.google.com/p/disruptor/)。

不幸的是,每段代码都已过时。有人知道,我在哪里可以找到小的和最新的howto(最好没有DSL)?

0 投票
2 回答
1045 浏览

disruptor-pattern - Java:Disruptor:Disruptor 是否应该只用于 POD 数据类型?

Disruptor 是否应该仅用于 POD 数据类型?

我的意思是应该Disruptor<T>只用于T取值,比如byte[], int[], etc

我的疑问是,如果我们使用Twhich has Objectreferences 作为其成员变量,我们需要new那些将位于堆上的成员变量。这将再次导致缓存未命中,因为成员变量可能位于堆的完全独立的部分。

那么我的想法是否正确,Disruptor<T>应该只用于T属于一组普通旧数据类型(POD)?

问候, 维马尔

更新:其他人可以看看这个问题吗?

更新2:

回复@Trisha

嗨特丽莎,

问候。

我看到了你提到的链接。

com.lmax.ticketing.api.Message继承自javolution.io.Struct元素并由元素组成,javolution.io.Struct并且javolution.io.Union它们Message之间可以互操作C/C++ 对于从内存布局继承的任何类,都由 's 成员javolution.io.Struct/Union的初始化顺序定义,Struct/Union并遵循与结构相同的 wordSize 规则C/C++

因此,从本质上讲,您可以控制放入Disruptor. 并且所有成员和子成员Message都是固定大小的,即没有任何动态内存(java.lang.Object

这也是我的观点,我们应该使用我们可以控制内存布局并且没有任何动态内存的元素。这样做是为了最大限度地减少缓存未命中。

假设,如果消息的一部分是,比如说,java.lang.String我们不知道 JIT 编译器会将那个字符串放在哪里。如果我正在访问Message.StringanEventHandler这可能会导致缓存未命中,因为字符串可能存在于完全不同的内存块中。

我对吗?