2013-06-01 84 views
8

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

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

+1

嗨@pmf,我已经添加了对您的问题的一般回应。如果您能够更清楚地了解为什么您认为LBQ是您关心的问题以及您的应用程序体系结构是什么样子,它可能会有所帮助。 – jasonk

回答

8

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

干扰器开箱即用提供了两种技术 - 我不会进入代码,但可以做到这一点,如果你需要。

  1. 它允许的方式进行排序事件处理程序,你可以对其进行配置,使每个处理器将并行处理的所有请求;每个请求由每个处理程序处理。

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

如果您已经确定了排队花费很长的时间,或者您有显著时间争(锁/同步),那么我肯定会看的干扰器。通过查看对您的架构的调整是否可能导致干净使用Disruptor,您将获得最大的收益。

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

将导致我使用Disruptor的指标将会是 - 以类似的方式处理大量短期任务,争用内存,排序需求,流式或重IO(可能受益于批处理)。