首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择并发字典的并发级别

如何选择并发字典的并发级别
EN

Stack Overflow用户
提问于 2015-05-07 21:30:34
回答 1查看 6.1K关注 0票数 26

我使用一个并发字典来存储大约200万条记录,并且想知道如何初始化我的字典的并发级别。

MSDN页面在其示例代码中有以下注释:

concurrencyLevel越高,可以在ConcurrentDictionary上并发执行的理论操作数就越多。然而,像调整字典大小这样的全局操作会随着concurrencyLevel的增加而花费更长的时间。

这是我所能找到的解释concurrencyLevel含义的最好方法,但它仍然非常模糊。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-07 21:37:21

最重要的是,即使您拥有比concurrencyLevel更多的并发访问,操作仍然是线程安全的。也就是说,设置concurrencyLevel是一个性能问题,而不是正确性问题。

concurrencyLevel指定可用于映射操作的独立锁的数量。每个锁都与散列空间的不同子集相关联,因此访问给定的元素需要持有特定的锁。这意味着一个线程的访问可能会阻塞另一个线程的访问,即使并发访问的数量远远低于concurrencyLevel。增加锁的数量可以降低锁竞争的概率,但增加了必须获取所有锁的操作成本(检查集合作为一个整体的操作成本,如CountIsEmptyValues,以及需要调整表大小的Add() )。

分析应用程序实际上是确定最佳concurrencyLevel的唯一方法。不过,将其设置为预期的工作线程数是一个好的开始。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30112025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档