2013-01-24 38 views
1

請參考:https://stackoverflow.com/a/3865121/1071840如何解決併發寫入公共隊列援助問題

我明白,如果多個線程將推動請求到一個隊列和緩衝區寫線程將有獨家訪問讀取/更新隊列..然後這個隊列可以同時寫入和讀取,我們將實現無鎖序列化。

但我的問題是線程不需要獲取隊列本身的鎖定。我希望保持請求的順序。

[這不是一個家庭作業問題。我只是想了解我們如何通過異步寫入來緩解多線程環境中的併發問題]

回答

1

但我的問題是線程是否需要獲取隊列本身的鎖定。

不一定。有併發隊列實現(如this one in .NETPPL中的此實現),它們完全無鎖,或者使用比鎖定整個隊列更好的粒度鎖定。這可以顯着提高整體吞吐量。

+0

謝謝您的及時答覆。我會讀通過..可能有更多的問題:) – user1071840

+0

@ user1071840這可能是日誌緩衝,如果它要去IO,基本上會執行最好的,如果寫入單個線程。通過擁有一個高效的併發隊列,您可以允許編寫者快速寫入隊列,並讓單個工作人員在項目到達並寫入磁盤時將其拖出。這往往會消除/減少爭用,因爲與爭用寫入緩衝區相比,爭用隊列將更低(或沒有)。 –