2012-05-23 28 views
0

我是Disruptor的新手。我有以下兩個查詢:LMAX的Disruptor如何與共享變量的多個生產者一起工作?

Q1。我得到了一個示例代碼one producer to one consumerone producer to multiple dependent consumers,

我喜歡得到一個示例代碼爲多個生產者多個消費者或序列:3P - 1C。你可以請參考任何博客或代碼示例給我? Q2302。這是一個關於多生產者環境中的通用問題,一個生產者結果將如何與之前生產者在環形緩衝區中的結果相關聯。

例如:是干擾器可以在一個單一的文件/變量得到由多個生產商更新了環境中使用。即有兩個生成器(P1,P2),它們正在更新單個共享變量(命名爲「count」)(這裏的count是ValueEvent類中的一個實例變量)

最初「count」值爲0。

生產者P1將加1與「計數」當前值。因此,在生產者P1處理之後,計數值將爲(0 + 1)= 1.

生產者P2將加上「計數」當前值2,所以在生產者P2處理之後,計數值將是1 + 2)= 3

基本上,P2需要讀取從環形緩衝器更新的「計數」值(由P1完成)並添加增加的值(2)。

我們如何保持生產的執行順序?(P2永遠P1執行後執行。)

在消費者方面,消費者(C1,C2)將讀取「計數」值順序( 1,3,。。。)。這是可以的,就像在環形緩衝區中一樣,每個消費者只會按順序讀取環形緩衝區值。

感謝, 杜。

回答

0

Q1:沒有例子 - 但是假設你使用,你需要,如果你想真正多個獨立製作使用ProducerBarrier Java實現。

Q2:但是你Q2告訴我,你還沒有完全得到獨立製片人在你的破壞者。由於存在依賴關係P1,所以P2則{C1,C2}。考慮P2是更新不同變量(不是P1更新的相同變量)的「消費者」,並且C2遵循P2。

例如:P1的計數= 0 + 1。 P2確實count2 = 1 + 2 = 3。 C1 & C2讀取「count2」變量。然後設置你的干擾者有P1-> P2-> {C1,C2}。在P1完成之前,P2不會開始處理。 C1 & C2將不會開始處理,直到P2完成。

如果你是後峯值性能,你必須花費大約兩個計數器之間的高速緩存行的共享服務。

相關問題