2009-10-05 49 views
0

是否有標準的方法來刪除並行事件流?在我試圖重新發明輪子之前,我想知道這個問題是否有一些已知的方法。如何重複數據刪除並行事件流

我的客戶端組件將與兩臺服務器通信。每個人都提供接近實時的事件流(〜1秒)。這些事件偶爾會出現故障。假設我可以唯一標識事件。我需要以相近的實時性能將單個事件流發送到消費代碼。

回答

1

關於這類問題已經寫了很多。這裏有一個基礎性文件,由萊斯利·蘭波特:

http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html#time-clocks

上操作轉換理論維基百科的文章是進一步研究的非常好的起點:

http://en.wikipedia.org/wiki/Operational_transformation

至於你的問題,你必須選擇一些任意的權重來衡量延遲成本與下降事件的成本。您可以維護兩個優先級隊列,按時間排序,傳入事件發生。你會做一個合併 - 在兩個隊列頭上拖延一段時間(以允許無序事件),並丟棄發生在你最後發送的任何事件的時間戳之前的事件。如果那不比你想象的要好,至少你可以閱讀那本酷酷的Lamport紙!

+0

該文件很有趣,並突出了問題的複雜性。我期待看看是否有其他選項給出了我的問題的某些特定領域方面,可能會更容易實施。謝謝。 – 2009-10-06 20:13:50

+0

哦。那麼,我的答案的最後一段就是那個易於實現的解決方案! – 2009-10-06 20:16:35

1

我認爲優化可能是操作系統特定的。從你描述的任務來看,我認爲兩個線程會消耗傳入的數據並將其附加到基於互斥體的具有訪問權限的公共流中。 Linux和Win32都有類似互斥體的程序,但是如果數據速率非常好,它們的性能可能會降低。在這種情況下,我會通過數據塊進行操作,從而不會經常使用互斥鎖。當然,有一個主線程會使用數據,並且它也可以通過互斥鎖訪問它。