【发布时间】:2009-02-15 09:53:40
【问题描述】:
有谁知道是否有任何可用于 .NET 的无锁容器库?
最好是被证明有效且比我们在 .NET 中使用的同步包装器更快的东西。
我在 .NET 上找到了一些文章,但没有一篇指定任何速度基准测试,也没有激发人们对其可靠性的信心。
谢谢
【问题讨论】:
-
请跟进并发布您可能在您可能测试过的无锁结构上发现的任何性能相关数据。
-
我们最终推出了自己的容器,主要基于 boyet.com/index.html。使用无锁容器与标准容器相比,我们处理样品批次所需的总时间(平均)减少了约 12%。总而言之,我会说这不值得:-(
-
我遇到了Ariadne,它有这些。我很难理解代码。对于像
for(;;){...some code...}这样的语句,它有一些古怪的空,并且它里面会有一个return 语句。它在顶部有一条评论说:“考虑到 4.0 FCL 已经有一个无锁队列,这个队列主要用于完成或用于库中的其他类。Mono 实现非常接近这一点,而MS 实现更复杂,但应该更好地利用 CPU 缓存..." -
@LouisSomers 我不像古板那么古怪;尽管
while(true)在今天可能更流行,但前者在我看来是“永远”,而后者对我来说是“而宇宙的基本逻辑规则”,这让我有点不安。自从那条评论之后,我确实在 FCL 之外添加了一些功能,我应该对其进行编辑,但我想我会保留它,直到今年晚些时候进行更彻底的审查。 -
@LouisSomers 我对“古怪”很满意,该库中的某些代码在速度方面确实有些古怪(
goto在手动编码的尾调用消除中)或古怪因为与不必考虑并发性的自然状态相比,状态转换是不寻常的。while(true)和for(;;)虽然完全相同,但纯粹是风格问题。for(;;)在 K&R 和 Stroustrup 的 C++ 书中使用,但while(true)后来变得更流行,所以for(;;)只是更老式。 (还有一些旧工具会抱怨这个常量,虽然不是在 C# 中)...
标签: .net multithreading data-structures synchronization lock-free