8

是否有一些示例代码可用于从标准LinkedBlockingQueue迁移到LMAX 的 Disruptor架构?我有一个可能从更改中受益的事件处理应用程序(单个生产者,多个消费者)。

当我的目标是最大化吞吐量而不是最小化延迟时,这是否有意义?

4

1 回答 1

8

Mentaqueue提供了基于相同想法的单个生产者单个消费者队列 - http://mentaqueue.soliveirajr.com/Page.mtw,您可以检查代码,尽管我自己从未使用过它。

开箱即用的Disruptor在这里提供了两种技术——我还不会介绍代码,但如果您需要,可以这样做。

  1. 它允许对事件处理程序进行排序,您可以对其进行配置,以便每个处理程序并行处理所有请求;每个请求都由每个处理程序处理。

  2. 一个 Worker Pool 实现,它允许一个工作线程池来每个处理一个请求;每个请求将从线程池处理一次。

如果您确定排队需要很长时间,或者您有大量时间争用(锁定/同步),那么我肯定会查看 Disruptor。通过查看对架构的调整是否可能导致对 Disruptor 的干净使用,您将获得最大的好处。

是的,减少事务延迟应该有助于实现吞吐量,所以它可能是有道理的,但这取决于是什么阻碍了你的吞吐量。这将成为一个非常笼统的评论 - 您应该确定应用程序阻碍吞吐量的区域。

引导我使用 Disruptor 的指标是 - 以类似方式处理的大量短期任务、内存争用、排序要求、流式传输或大量 IO(可以从批处理中受益)。

于 2013-06-02T06:11:46.123 回答