栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

没有并发列表 在.Net 4.0中?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

没有并发列表 在.Net 4.0中?

我试了一下(也:在GitHub上)。我的实现存在一些问题,这里不再赘述。让我告诉您,更重要的是,我学到了什么。

首先,您将无法获得

IList<T>
无锁且线程安全的完整实现。特别是,除非您还忘记了O(1)随机访问(即除非您“作弊”并仅使用某种类型的链表并让索引很烂),否则随机插入和删除将
无法 工作。

可能是值得的是线程安全的,集有限的

IList<T>
:尤其是,一个将允许
Add
并提供随机 只读
通过索引访问(但没有
Insert
RemoveAt
等,还没有随机 写入 访问)。

这是我

ConcurrentList<T>
实施的目标。但是,当我在多线程方案中测试其性能时,我发现 仅同步添加到a
List<T>
会更快
。基本上,添加到a
List<T>
已经快如闪电;所涉及的计算步骤的复杂性很小(增加索引并分配给数组中的元素; 的确如此 )。您将需要进行 大量
并发写入,以查看与此相关的任何类型的锁争用。即使在这种情况下,每次写入的平均性能仍然会击败更昂贵的方法,尽管在中是无锁的
ConcurrentList<T>

如果列表的内部数组需要调整自身大小,这种情况很少见,那么您付出的代价确实很小。因此,最终,我得出结论,这是 一个
只添加

ConcurrentList<T>
集合类型就有意义的小众场景:当您希望 确保每次调用
中添加元素的开销很低时(因此,与摊销的性能目标相对)。

它根本不像您想的那样有用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号