在這個例子中https://stackoverflow.com/a/9980346/93647和這裏Why is my disruptor example so slow?干擾物的例子(在問題的末端)有1個出版商其中發佈項目和1名消費者。1個出版商和4名平行消費者
但在我的情況下,消費者的工作更加複雜,需要一定的時間。所以我想要4個並行處理數據的消費者。
因此,舉例來說,如果生產商生產的數字:1,2,3,4,5,6,7,8,9,10,11 ..
我想consumer1趕上1,5,9, ...消費者2捕捉2,6,10,...消費者3捕捉3,7,11,...消費者4捕捉4,8,12 ...(不完全是這些數字,這個想法是數據應該並行處理,我不關心哪個消費者處理哪個數字)
並且記住這需要並行完成,因爲在實際應用中消費者的工作非常昂貴。我希望消費者可以通過不同的線程來執行多核系統的功能。
我當然可以只創建4個ringbuffers並附加1名消費者1環形緩衝器。這樣我可以使用原始示例。但我覺得這是不正確的。有可能創建1個發佈者(1個ringbuffer)和4個消費者是正確的 - 因爲這是我需要的。
添加鏈接到谷歌羣體非常simular問題:https://groups.google.com/forum/#!msg/lmax-disruptor/-CLapWuwWLU/GHEP4UkxrAEJ
所以我們有兩個選擇:在每個另外
- 一個圈許多消費者(每個消費者將「喚醒」,所有消費者應該擁有相同的WaitStrategy)每個消費者只需要處理它的數據就可以喚醒,每個消費者可以擁有自己的WaitStrategy)。
謝謝!會嘗試! – javapowered
你知道如果調用ringbuffer'Next()''Publish'方法是線程安全的嗎?我可以平行稱呼他們嗎?我可以從兩個不同的線程調用ringbuffer'Next'方法嗎? – javapowered
也是如何幹擾使內部?創建了多少個線程?干擾者爲每個消費者創建單獨的線程?或使用某種線程池? – javapowered