disruptor中多執行緒消費者的疑問
請教下大家,關於disruptor 中的消費者
就拿通俗包裝產品做個例子, 生產者生產出產品後,將產品放入 ringBuffer, 然後消費者從ringBuffer中取得產品進行包裝。
我理解的 在disruptor中,生產者當然可以是多個,即多執行緒來處理,多個生產者同時向ringBuffer中填充產品,這個由disruptor來處理並行寫入問題。
問題是,在大多數場景中,我們不光需要 並行的生產者,更需要並行的消費者。
而在 disruptor 框架中,如果我們定義了多個 EventHandler 的例項, 這些EventHandler 都會對每個產品 消費一次,
例如:
disruptor.handleEventsWith( new HelloEventHandler("first")
,new HelloEventHandler("second");
執行的結果是:
handler2-----pool-1-thread-2------:0
handler1-----pool-1-thread-1------:0
handler2-----pool-1-thread-2------:1
handler1-----pool-1-thread-1------:1
handler2-----pool-1-thread-2------:2
handler1-----pool-1-thread-1------:2
handler2-----pool-1-thread-2------:3
handler1-----pool-1-thread-1------:3
從上述結果可以看到 , 每一個handler是啟動了一個執行緒來處理,但是其從RingBuffer中取出的資料會重複。
例子是參考:
Disruptor例項:單生產者-多消費者 , 這篇文章的內容: http://www.jdon.com/44868
我本來的目的是希望 HelloEventHandler 的這兩個例項可以分別啟動執行緒並行執行,以並行消費產品。
但事實上, 生產者沒產出一個產品, 每個消費者例項都會重複的執行一遍。
因此我想問一下,在disruptor 應該如何來實現 有多個消費者執行緒 同時來獲取RingBuffer中的產品,而不會重複執行呢
難道必須在EventHandler中自行判斷當前所傳遞的事件是否已經被消費過才可以的嗎?
如果這樣的話,消費者中判斷是否已處理過產品,豈不又涉及到多執行緒問題了。
另外也想聽取一下 大家對 Disruptor中 啟動消費者數量的建議,系統中啟動多少生產者,多少消費者 ,有哪些衡量點和參考。
謝謝。
就拿通俗包裝產品做個例子, 生產者生產出產品後,將產品放入 ringBuffer, 然後消費者從ringBuffer中取得產品進行包裝。
我理解的 在disruptor中,生產者當然可以是多個,即多執行緒來處理,多個生產者同時向ringBuffer中填充產品,這個由disruptor來處理並行寫入問題。
問題是,在大多數場景中,我們不光需要 並行的生產者,更需要並行的消費者。
而在 disruptor 框架中,如果我們定義了多個 EventHandler 的例項, 這些EventHandler 都會對每個產品 消費一次,
例如:
disruptor.handleEventsWith( new HelloEventHandler("first")
,new HelloEventHandler("second");
執行的結果是:
handler2-----pool-1-thread-2------:0
handler1-----pool-1-thread-1------:0
handler2-----pool-1-thread-2------:1
handler1-----pool-1-thread-1------:1
handler2-----pool-1-thread-2------:2
handler1-----pool-1-thread-1------:2
handler2-----pool-1-thread-2------:3
handler1-----pool-1-thread-1------:3
從上述結果可以看到 , 每一個handler是啟動了一個執行緒來處理,但是其從RingBuffer中取出的資料會重複。
例子是參考:
Disruptor例項:單生產者-多消費者 , 這篇文章的內容: http://www.jdon.com/44868
我本來的目的是希望 HelloEventHandler 的這兩個例項可以分別啟動執行緒並行執行,以並行消費產品。
但事實上, 生產者沒產出一個產品, 每個消費者例項都會重複的執行一遍。
因此我想問一下,在disruptor 應該如何來實現 有多個消費者執行緒 同時來獲取RingBuffer中的產品,而不會重複執行呢
難道必須在EventHandler中自行判斷當前所傳遞的事件是否已經被消費過才可以的嗎?
如果這樣的話,消費者中判斷是否已處理過產品,豈不又涉及到多執行緒問題了。
另外也想聽取一下 大家對 Disruptor中 啟動消費者數量的建議,系統中啟動多少生產者,多少消費者 ,有哪些衡量點和參考。
謝謝。
[該貼被oleio於2013-05-04 17:04修改過]
相關文章
- python中多執行緒消費者生產者問題Python執行緒
- 多執行緒之生產者消費者執行緒
- 多執行緒-生產者消費者問題程式碼1執行緒
- Java多執行緒——生產者消費者示例Java執行緒
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- Java多執行緒——生產者和消費者模式Java執行緒模式
- Java多執行緒14:生產者/消費者模型Java執行緒模型
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- Java多執行緒——消費者與生產者的關係Java執行緒
- 多執行緒下的生產者和消費者-BlockingQueue執行緒BloC
- 關於Java多執行緒實現生產者和消費者的問題Java執行緒
- Java 多執行緒(Java.Thread)------ 執行緒協作(生產者消費者模式)Java執行緒thread模式
- Java多執行緒消費訊息Java執行緒
- kafka多執行緒順序消費Kafka執行緒
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Python-多執行緒及生產者與消費者Python執行緒
- 從零開始實現lmax-Disruptor佇列(三)多執行緒消費者WorkerPool原理解析佇列執行緒
- 生產者消費者模式--java多執行緒同步方法的應用模式Java執行緒
- 關於多執行緒協作的疑問執行緒
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- 用Python多執行緒實現生產者消費者模式Python執行緒模式
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- 多執行緒-生產者消費者之等待喚醒機制執行緒
- Java多執行緒-併發協作(生產者消費者模型)Java執行緒模型
- C# 多執行緒學習(3) :生產者和消費者C#執行緒
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計
- java多執行緒總結六:經典生產者消費者問題實現Java執行緒
- 使用多執行緒增加kafka消費能力執行緒Kafka
- 多執行緒學習-Disruptor佇列執行緒佇列
- JAVA執行緒消費者與生產者模型Java執行緒模型
- 多執行緒 -- 移動檔案(生產者,消費者模式應用)執行緒模式
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- java多執行緒之消費生產模型Java執行緒模型
- 多執行緒程式中對資料庫連線使用的疑問執行緒資料庫
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒