问题标签 [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(Disruptor Pattern)来构建现实世界的消息系统?
由于 RingBuffer 预先分配给定类型的对象,如何使用单个环形缓冲区来处理各种不同类型的消息?
您不能创建新的对象实例来插入到 ringBuffer 中,这会破坏预先分配的目的。
因此,您可以在异步消息传递模式中有 3 条消息:
- 新订单请求
- 新订单已创建
- 新订单被拒绝
所以我的问题是你打算如何将 Disruptor 模式用于现实世界的消息系统?
谢谢
链接: http ://code.google.com/p/disruptor-net/wiki/CodeExamples
c++ - LMAX 的颠覆者模式:有 C++ 的端口吗?
LMAX 的 Disruptor 模式有开源Java和.NET版本,如视频LMAX - How to Do 100K TPS at Less than 1ms Latency中所述。这里有更多关于 Disruptor 模式信息的链接。
是否有人知道将Disruptor 模式移植到 C++ 的端口,无论是已完成还是处于测试阶段?
更新
显然,其他人正在呼吁使用Disruptor 模式的 C++ 版本。
java - Java Future.get() 不返回
从下面的代码或ValueMutationEventHandler,为什么我不能做 future2.get(),等待 future2 完成然后得到结果?
如果我执行 future2.get(),它将永远等待。
c# - LMAX Disruptor 可以移植到 C# 吗?
我知道有些人正在开发 C++ 端口。
可以使用 C# 端口吗?特别是,我正在考虑 volatile 字段在 C# 中只有 32 位的限制。如果这是唯一的问题,那么是否值得将环形缓冲区写入仅具有 32 位允许的插槽数。这比系统生命周期中的事件要少得多。我有这个权利吗?我们可以在某个时候回滚到 0 吗?
先感谢您。
java - Disruptor - 未调用事件处理程序
我正在使用Disruptor框架,发现我的事件处理程序没有被调用。
这是我的设置代码:
在其他地方,我发布活动。我已经尝试了以下两种方法:
事件发布方式A:
在这种情况下,我发现第一个EventHandler
被调用,但除此之外再也没有。
事件发布方式 B:
在这种情况下,我发现根本没有调用任何事件处理程序。
我究竟做错了什么?
更新
这是我的完整事件处理程序。我应该如何发出处理完成的信号?
disruptor-pattern - Java:使用或不使用 Disruptor。.
嗨,
目前我正在开发一个程序,该程序从 amq 队列中获取 2 个值并对它们执行一系列数学计算。我的程序订阅并通过回调(侦听器)接收消息的 amq 服务器上创建了一个主题。
现在,每当消息到达时,这两个值就会被取出并添加到 SynchronizedDescriptiveStatistics 对象中。在每次添加到值列表之后,整个计算序列都会重新执行(这实际上是要求的一部分)。
我现在面临的问题是,由于我使用的是侦听器,因此有时在计算过程中会收到一条或多条消息。尽管 SynchronizedDescriptiveStatistics 自己处理所有与线程相关的问题,但是当它失锁或其他情况时,它会立即将所有等待值添加到其数字列表中。虽然我的问题是添加一个值,然后对其执行 calcls,然后是第二个值,然后不断地执行。
我想出的解决方案是在我的程序中使用作业队列(不是 amq 队列)。这样,每当计算结束时,程序就会在队列中寻找更多的作业并相应地继续。
由于我也在寻找效率和速度,我认为 Disruptor 框架可能对这个问题有好处,并且它针对线程情况进行了优化。但我不确定在我的应用程序中实现 Disruptor 是否值得,因为常规的标准队列可能足以满足我想要做的事情。
让我还告诉您,需要执行计算的数据很多,并且会不断出现,并且每次添加单个值时都需要以连续方式重新执行整个计算。因此,请牢记效率和海量数据,您认为从长远来看什么是有用的。
等待答复。. .
问候。
c# - Disruptor.NET 示例
我正在尝试学习如何使用 Disruptor.NET 消息传递框架,但找不到任何实际示例。那里有很多文章,其中包含有关其工作原理的图片,但是我找不到任何实际去向您展示如何实现这些方法的地方。什么是一个例子?
java - LMAX Disruptor 最简单实际的示例代码
我希望我能得到最简单的示例代码,它将展示如何使用 LMAX 中断器(http://code.google.com/p/disruptor/)。
不幸的是,每段代码都已过时。有人知道,我在哪里可以找到小的和最新的howto(最好没有DSL)?
disruptor-pattern - Java:Disruptor:Disruptor 是否应该只用于 POD 数据类型?
Disruptor 是否应该仅用于 POD 数据类型?
我的意思是应该Disruptor<T>
只用于T
取值,比如byte[], int[], etc
?
我的疑问是,如果我们使用T
which has Object
references 作为其成员变量,我们需要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.String
anEventHandler
这可能会导致缓存未命中,因为字符串可能存在于完全不同的内存块中。
我对吗?