我想使用Java實現各種發佈者/訂閱者模式,並且當前用完了想法。發佈者/訂閱者模式的並行實現
有1個發佈者和N個訂戶,發佈者發佈對象,那麼每個訂閱者需要按照正確的順序處理每個對象一次和一次。發佈者和每個訂閱者在他們自己的線程中運行。
在我最初的實現中,每個訂閱者都有自己的阻塞隊列,發佈者將對象放入每個訂閱者的隊列中。這可以正常工作,但如果用戶的任何隊列已滿,發佈者將被阻止。這會導致性能下降,因爲每個用戶在處理對象時需要不同的時間。
然後在另一個實現中,發佈者將對象保存在它自己的隊列中。與對象一起,AtomicInteger計數器與其中的訂戶數量相關聯。每個用戶隨後偷看隊列並減少計數器,並在計數器達到零時將其從隊列中刪除。
以這種方式,發佈者沒有阻塞,但是現在訂閱者需要等待對方處理對象,在下一個對象被窺視之前從隊列中刪除對象。
有沒有更好的方法來做到這一點?我認爲這應該是一個相當普遍的模式。
我想知道如果阿卡,其異步消息傳遞設施,可以幫助在這種情況下? – Wudong