C# · 12月 24, 2021

c# – ConcurrentQueue vs Queue lock的性能

我必须实现一个消费者一生产者的标准算法.我可以使用Queue和几个锁语句来实现它.或者我可以使用ConcurrentQueue.什么是更好的?

如果使用队列锁,那么我可以优化“多加/重新”,因为我可以锁一次,然后添加多次.

一般情况下更快 – ConcurrentQueue或Queue锁定和差异有多大?当然,ConcurrentQueue是最显着的方式,但是我不希望在HFT交易应用程序中使用这个方法,因此我不希望失去很多性能.

解决方法 从 C# in a Nutshell:

The concurrent stack,queue,and bag classes are implemented
internally with linked lists. This makes them less memory efficient
than the nonconcurrent Stack and Queue classes,but better for
concurrent access because linked lists are conductive to lock-free or
low-lock implementations.

换句话说,很难定义一般的情况,更不要说预测性能差异是什么.

这取决于收集的大小和使用情况.性能可以预期更好,给予足够的并发访问,内存消耗将会更差.