ConcurrentQueue的Count属性的复杂度分析
在普通的在普通的非线程安全集合(如 List 或 Queue)中,Count 通常只是简单地返回一个内部维护的 int 字段,时间复杂度是严格的 O(1)。然而,当在并发集合中,为了追求极致的高吞吐量,Count属性的实现可能会发生变化。本文通过分析 ConcurrentQueue 的源码,分析ConcurrentQueue的Count实现,并尝试回答为什么它不使用简单的 Interlocked 计数。最后在使用集合时,如果要判断是否为空,使用IsEmpty或者Any()方法,在大多数集合中,是否为空是一个极其快速的O(1)操作,绝对不要写if (queue.Count0)这样的代码。另外,不是所有的集合的Count方法的时间复杂度都是相同的,主要要考虑的是集合内部实现的数据结构。 …