为什么ConcurrentQueue没有容量?

kas*_*rhj 7 .net

为什么不ConcurrentQueue具有capacity像其非并发表妹?也没有提到默认容量.

与非并发版本相比,"缺失"容量是否会影响性能,而实现者可以提供对队列典型大小的合格猜测?

Sri*_*vel 13

ConcurrentQueue使用无锁技术实现.它基于"链接列表".容量在链接列表中没有意义,因此它不会暴露容量.

向LinkedList添加元素非常便宜,不需要调整数组大小.它只是修改Tail指针(引用).如果实现使用数组,那么调整数组的大小是很昂贵的,因此预先分配数组会在排队许多元素时显着提高性能.

Queue(System.Collections.Generic.Queue<T>System.Collections.Queue)的其他非并发实现是基于数组的.因此,预先分配具有给定容量的数组是有意义的,以避免经常调整数组的大小,从而暴露出Capacity属性.

  • @Downvoter解释答案的错误将不胜感激. (3认同)
  • 我真的很讨厌@downvoters.如果出现问题,请说出来.不要打,跑. (2认同)
  • 确实.我们是成年人.我们不会低估你投票给我们...... @ downvoters (2认同)