這個問題一直困擾着我幾個星期,但我太急於以明智的事後處理它。我終於向agog客戶提供了一個快速和骯髒的解決方案,以緩解他脆弱的神經(作爲結果,也是我的&)。我現在終於花時間用自由的頭腦來審視這個問題。混合異步/同步架構
基本上,我面臨的挑戰是儘可能快地處理同步數據(Time-Ordered Series)(< 5ms)。在嘗試了許多Rube-Goldberg風格的設計之後,比如有序的線程池和混合解決方案,其中包括平行工作者隊列和其他不可思議的牽強的想法,一個徹底的實踐工作臺證明,堅持一個普通的「舊單線程鏈處理是數據完整性和性能的最佳選擇。
但是,在應用程序底部的某個點,這會達到一定的限制。我需要以並行方式向不同的處理器廣播數據。而這正是我頭痛又開始的地方。 當我使數據中心(見下文)以異步方式(通過線程&二進制環形緩衝區)向處理器發送數據時,接收方以混亂的順序接收數據,並且數據順序被破壞。
因此,我正在尋找一種以並行方式向所有處理器發送數據的方式,並保持順序。我的另一個擔心是異步性:如果數據中心的SendEvent
委託人以簡單的傳統方式(通過+=
)通過進程的Receive
方法訂閱,那麼這將如何表現?
首先,我不希望訂閱被稱爲「一個一個」。我相信有一種方法可以將其並行化。其次,最重要的是,我確實不希望處理器A鎖定整個鏈條,直到完成其工作。
所以這裏是人。長話短說,我想找到一種明智的方式來不斷等待數據處理,而不必等待處理器發送數據,但同時我需要每個數據處理器以有序的方式接收數據。這可能聽起來不兼容,但我確信有一個很簡單的方法來做到這一點(但我深深地陷入了這個問題,我非常困惑,這就是爲什麼我要求你的幫助,好人)
我喜歡你的「平行工人隊列」的想法。具體而言,[阻塞隊列](http://stackoverflow.com/a/530228)允許數據在等待處理時排隊。 – 2012-07-16 15:33:32
處理器位於單個(多核)系統還是分佈式計算機?需要預處理器還是後處理器或兩者兼容?什麼是.NET版本? – oleksii 2012-07-16 15:37:18
什麼構成你的問題中的「秩序」? – Kit 2012-07-16 16:23:12