如何选择并发字典的并发级别
How to chose concurrency level of a concurrent dictionary
我正在使用一个并发字典来存储大约 200 万条记录,想知道将我的字典的并发级别初始化为什么。
MSDN 页面在其示例代码中有以下注释:
The higher the concurrencyLevel
, the higher the theoretical number of operations that could be performed concurrently on the ConcurrentDictionary
. However, global operations like resizing the dictionary take longer as the concurrencyLevel
rises.
这是我能找到的最好的解释 concurrencyLevel 含义的内容,但它仍然非常模糊。
要了解的最重要的一点是,即使您的并发访问比 concurrencyLevel
多,操作仍然是线程安全的。也就是说,设置 concurrencyLevel
是性能问题,而不是正确性问题。
concurrencyLevel
指定可用于映射操作的独立锁的数量。如果您有 n
个线程并发访问字典,将 concurrencyLevel
设置为高于 n
将不会产生任何额外的好处。一般来说,concurrencyLevel
的最佳值将明显低于工作线程的数量,因为给定的工作线程不会将大部分时间花在访问字典上。
分析您的应用程序确实是确定最佳 concurrencyLevel
的唯一方法。不过,将其设置为预期的工作线程数是一个好的开始。
我正在使用一个并发字典来存储大约 200 万条记录,想知道将我的字典的并发级别初始化为什么。
MSDN 页面在其示例代码中有以下注释:
The higher the
concurrencyLevel
, the higher the theoretical number of operations that could be performed concurrently on theConcurrentDictionary
. However, global operations like resizing the dictionary take longer as theconcurrencyLevel
rises.
这是我能找到的最好的解释 concurrencyLevel 含义的内容,但它仍然非常模糊。
要了解的最重要的一点是,即使您的并发访问比 concurrencyLevel
多,操作仍然是线程安全的。也就是说,设置 concurrencyLevel
是性能问题,而不是正确性问题。
concurrencyLevel
指定可用于映射操作的独立锁的数量。如果您有 n
个线程并发访问字典,将 concurrencyLevel
设置为高于 n
将不会产生任何额外的好处。一般来说,concurrencyLevel
的最佳值将明显低于工作线程的数量,因为给定的工作线程不会将大部分时间花在访问字典上。
分析您的应用程序确实是确定最佳 concurrencyLevel
的唯一方法。不过,将其设置为预期的工作线程数是一个好的开始。