2013-06-01 137 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(可能受益於批處理)。