2015-05-05 77 views
4

爲什麼不ConcurrentQueue有一個capacity像它的非併發堂兄弟? 也沒有提及默認容量。爲什麼ConcurrentQueue中沒有容量?

與非併發版本相比,「缺失」容量是否會影響性能?實施者可以提供有關隊列典型大小的合格猜測嗎?

+0

由於實現不需要容量?併發和非併發數據結構有不同的實現。 – TcKs

+0

也許檢查[這篇文章](http://www.codethinked.com/net-40-and-system_collections_concurrent_concurrentqueue) - 它的實現方式與只有一個內部數組的非併發的完全不同。因此,告訴它要添加多少項目,然後添加或不添加這些信息,只需添加項目就能獲得完全相同的分配數量。 –

回答

8

ConcurrentQueue是使用無鎖技術實現的。它基於「鏈接列表」。容量在鏈接列表中沒有意義,因此它不會公開容量。

將元素添加到LinkedList是很便宜的,它不需要調整數組的大小。它只是修改尾指針(引用)。如果實現使用數組,那麼調整數組的大小會很昂貴,因此預分配數組將大大提高性能,當您排隊許多元素時。

QueueSystem.Collections.Generic.Queue<T>System.Collections.Queue)的其他非並行實現是基於數組的。因此預先分配給定容量的數組是有意義的,以避免經常調整數組大小,因此它暴露了Capacity屬性。

+3

@Downvoter解釋什麼是錯的答案將不勝感激。 –

+2

我真的很討厭隨機@downvoters。如果有什麼不對,請說出來。不要打併跑步。 –

+2

確實。我們是成年人。我們不會因爲投票而降低我們的投票... @downvoters –

相關問題