问题标签 [lmax]
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 Disruptor 中执行器服务的使用
我正在评估用于数据处理应用程序平台的 Disruptor 库。具体来说,我会针对 Akka 演员框架和纯 Java 执行器服务进行评估,以适应我们的问题领域。
为了实例化一个新的 Disruptor(队列,我应该说?),我们需要提供一个 ExecutorService 实例(v3.3.2)。当我检查 Disruptor 的示例代码时,几乎在所有情况下我都看到缓存的线程池正在被传递。我有一个单一的消费者(EventHandler)场景。在这种情况下,如果我使用单线程执行器有什么区别吗?
java - 用单线程 LMAX 编写
我已经了解了 LMAX 和这个名为 RingBuffer 的奇妙概念。所以人们说,当只有一个线程写入环形缓冲区时,性能比多个生产者要好得多......
但是,我真的不认为典型应用程序可以仅使用一个线程在 ringbuffer 上写入...我真的不明白 lmax 是如何做到的(如果他们这样做的话)。例如N个不同的交易者在交易所下订单,这些都是异步请求,正在转换为订单并放入ringbuffer,他们怎么可能用一个线程写这些?
问题 1. 我可能会遗漏某些内容或误解某些方面,但是如果您有 N 个并发生产者,如何将它们合并为 1 而不相互锁定?
问题 2。我记得 rxJava 可观察对象,您可以在其中获取 N 个可观察对象并使用Observable.merge将它们合并为 1我想知道它是否以任何方式阻塞或维护任何锁定?
lmax - 来自 LMAX Disruptor 框架的 WorkerPool 示例
从 LMAX Disruptor Framework 中寻找 WorkerPool 示例。这个想法是在我们想确保事件只被消费一次时使用它(可轮询通道而不是可订阅通道)
java - 破坏者一个事件处理程序停止其他事件处理程序
我正在使用以下事件处理程序运行中断实例:
我发现了一个 Replicator() 线程挂起并阻塞 Logic() 线程的实例。
如果环形缓冲区中有 1 个事件,中断线程是否按顺序工作?
java - 为什么即使我调用disruptor.shutdown我的程序也不会停止
我一直在尝试使用 LMAX 干扰器来缓冲我的一个程序产生的内容,并将它们作为一批记录发布到另一个程序(我仍然无法完成消费者批处理部分)。但即使不使用记录的批处理,它也可以正常工作。但我的问题是即使我使用调用
正如在其中一个示例中给出的那样,它不会停止执行程序。它甚至会在这些方法下面执行语句。当我打印
它返回真。有人可以帮我弄这个吗...
编辑
jakarta-ee - 对在 Java EE 应用程序中使用 log4j2 AsynchronousLoggers 的担忧
我想在 Java EE 7 应用程序中使用 Log4j2 异步记录器。
这需要在类路径上使用 LMAX 中断器 3.0.0.jar 或更高版本。
我担心这会破坏与在 Java EE 容器中启动“用户”线程相关的规则。
log4j2 自动配置是否检测到 Jee 容器的存在?还是我需要通过 log4j2 ManagedExecutorService?在 WorkerPool 中使用?
java - LMAX Disruptor - what determines the batch size?
I have been recently learning about the LMAX Disruptor and been doing some experimentation. One thing that is puzzling me is the endOfBatch
parameter of the onEvent
handler method of the EventHandler
. Consider my following code. First, the dummy message and consumer classes that I call Test1
and Test1Worker
:
Notice that I have put a delay of 500 milliseconds just as a substitute for some real world work. I am also printing in the console the sequence number of the
And then my driver class (which is acting as the producer) called DisruptorTest
:
Here, after initializing the required stuffs, I am feeding 10 messages to the RingBuffer
(buffer size 8) and trying to monitor a couple of things - the delay for the producer for claiming the next slot in the RingBuffer
and the messages with their sequence numbers on the consumer side, along with whether a particular sequence is being considered as end of batch.
Now, interestingly with the 500 ms delay involved for processing each message, this is what I get as output:
However, if I remove the 500 ms wait time, this is what I get:
So it looks like whether a certain message is considered to be at the end of a batch (i.e., the size of a batch) is being influenced by the consumer's message processing delay. May be I am being stupid here, but is that how it should be? What's the reasoning behind that? What determines the batch size in general anyway? Thanks in advance. Let me know if anything in my question is unclear.
disruptor-pattern - 在中断器中使用 TimeoutBlockingWaitStrategy 时出现空指针异常
我正在使用 workerpool 示例并尝试不同的 WaitStrategies。当我尝试 TimeoutBlockingWaitStrategy 时,出现错误。这是程序和调用堆栈。
错误如下
想知道我的代码中是否存在错误。非常感谢任何帮助。此外,如果有人可以在中断器中解释 TimeoutBlockingWaitStrategy 的目的,那就太好了。
java - reactor lmax 线程转储
试图理解下面的(部分)堆栈跟踪。使用spring的项目reactor 2.0.4。
我得到了应该为工作线程创建任务和分配任务的任务调度程序线程。此时应用程序挂起(工作线程不记录任何内容,在不同时间进行的线程转储始终相同等)。
我可以根据以下行声明环形缓冲区已满:at reactor.jarjar.com.lmax.disruptor.MultiProducerSequencer.next(MultiProducerSequencer.java:136)
如果环形缓冲区已满,为什么我的工作线程没有执行任何这些任务?环形缓冲区状态会损坏吗?
disruptor-pattern - EventHandler onEvent 的 LMAX Disruptor Timeout
我有一个环形缓冲区和一个事件处理程序。这用作消息传递服务器的入站缓冲区。
在我的偶数处理程序中,它会执行一些 AMQP 服务调用,并且有时由于该调用等待而没有超时(调用 AMQP 服务的下划线协议库中的错误)。在 2000tps 的情况下,这会导致我的 4096 大小的环形缓冲区在瞬间达到 FULL。因为由于上述事实,onEvent 调用者线程似乎没有从该方法返回并在 onEvent() 内无限等待。
目前,为该调用创建超时是不可能的。
问题是::
当中断引擎调用 onEvent() 时,我们是否可以在 Buffer 创建级别或其他级别设置超时,其中 onEvent() 方法调用会有超时。
我正在使用带有 BlockingWaitStrategy 的破坏者 3.3.2。