2012-09-25 31 views
3

我們有一個具有固定長度數組的Disruptor實現。是否可以實現不依賴於該數組的模式版本,而是包含(可能是自描述的)可變長度對象列表。例如,Protobuf對象的Ringbuffer?是否可以在不使用固定長度數組的情況下使用Disruptor/Ringbuffer模式?

我知道固定長度數組是用於「預先分配」的步驟,但我認爲可以用一個或多個對象池來近似該步驟。

+0

你想達到什麼目的?你是否想要一個不斷增長的環緩衝區,在重新使用最老的內存(例如事件日誌或類似的東西)之前,它只會增長到特定的數量? – Mario

+0

我需要一個更靈活的環緩衝區。我已經繼承了一個可以預測的系統,但對延遲要求很少/沒有低延遲要求。添加新的參數或測試新的想法對於固定長度陣列的不靈活性是難以置信的。 – endian

+0

也許我錯過了某些東西,因爲沒有使用這個特定的模式,但是什麼新的參數?陣列如何「不靈活」? – Mario

回答

1

disruptor的java版本中的環緩衝區是任何對對象的引用數組。你可以通過你創建的EventFactory實例把你想要的任何對象放在那裏。

1

確實有可能實現一個沒有被Object數組支持的disruptor版本,但它不會是高性能的。 LMAX Exchange Disruptor的設計和實施已經引起了許多思考和機械同情。

實質上,環形緩衝區是一個預先分配的對象池。根據我的經驗,我從來不用擔心在任何真實世界的代碼中直接管理環形緩衝區的資源。破壞者將在必要時自動施加反壓。

該庫提供了一個很好的DSL來爲您的應用程序構建一個依賴關係圖,並且基本上爲您提供了免費的並行性。

相關問題