2013-01-01 122 views
10

我要實現一個消費者一個生產者標準算法。我可以很容易地使用Queue和幾個lock語句來實現它。或者我可以使用ConcurrentQueue。什麼是更好的?性能VS隊列+鎖定

如果使用Queue + lock那麼我可以優化「多重加/回覆」,因爲我可以多次使用lock然後Add

什麼是在一般的情況下更快 - ConcurrentQueueQueue + lock和多少的區別是什麼?當然,ConcurrentQueue是最直接的轉發方式,但我不想在HFT交易應用程序中使用它,所以我不想放鬆很多業績。

+0

首先,性能與CPU編號。很難在某種抽象模式下評估多線程應用程序的性能。 – user1929959

+7

在你的環境中測量什麼?我可以給你數字,證明你想要的東西在我的機器上。 –

回答

19

C# in a Nutshell

併發棧,隊列和袋類用鏈表實現 內部。這使得它們的內存效率更低 比nonconcurrent StackQueue類,但更好的 併發訪問,因爲鏈接列表傳導鎖無效或 低鎖實現。

換句話說,很難定義一般情況,更不用說預測性能差異會是什麼。

這取決於收集和使用的大小。考慮到足夠的併發訪問,性能預計會更好,內存消耗會更差。