从LinkedBlockingQueue迁移到LMAX'Disruptor

时间:2013-06-01 15:56:35

标签: java concurrency queue disruptor-pattern

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

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

1 个答案:

答案 0 :(得分:8)

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

开箱即用的

Disruptor 提供了两种技术 - 我不会进入代码但是如果需要可以这样做。

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

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

  3. 如果您已经确定排队需要很长时间,或者您有很长时间争用(锁定/同步),那么我肯定会看看Disruptor。通过查看对您的体系结构的调整是否可以导致干扰器的清洁使用,您将获得最佳效益。

    是的,减少事务延迟应该有助于实现吞吐量,因此它可能有意义,但这取决于阻碍吞吐量的因素。这将成为一个非常笼统的评论 - 您应该确定应用程序阻碍吞吐量的区域。

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