java - 具有最快(并发)添加操作的集合
问题描述
我正在寻找一个具有最有效的“添加项目”并发操作的集合。Scala 或 Java 都不错。
我通常:
- 一次插入 100.000 个条目
- 不在乎订单
- 仅在没有附加时读取和清除集合。所以不重要
此外,它应该与多线程一起使用(因此存在并发约束)。但是我需要它在没有并发时最有效:并发安全的设计在没有并发访问时不应该有太大的影响。
我使用这个集合来记录性能测量。这就是为什么不偏向过多的实际性能应该是最有效的。但是,由于集合大小可能很大并且事先不知道,它应该有效地应对大小增加。
那么哪个集合最好用呢?
我目前使用了一个mutable.ListBuffer
with buffer.synchronized{ ... }
around 追加(和清除)操作。我尝试使用var buf: List
具有类似synchronized{ ... }
块的(scala),但它严重影响了测量。
解决方案
我会说ConcurrentLinkedQueue。这是使用 CAS 的 O(1) 插入。因此,在中等负载下,您可能不会有更快的插入。如果您的负载非常高,您可能需要考虑使用LinkedBlockingQueue。
既然您说它可能会在添加时是单线程的,那么使用 CLQ 和 CAS 将是您的最佳选择。
推荐阅读
- swift - 如何在编辑模式下删除编辑附件视图和重新排序控件之间的分隔线?
- react-native - FastLane 未能找到联系信息
- magento2 - 如何修复配置magento 2中的js问题?
- android - Microsoft Azure DevOps Pipeline 在 Gradle Android 中因连接重置错误而失败
- c# - EF Core 5 更新未更改的实体和属性
- tableau-api - 两个标志值 0 之间标志值 1 的计数
- c# - 在 ASP .NET Core 的视图数据中返回 Null
- xml - 如何获取xml子节点中值的具体字数?
- github - 无法通过 Web UI 访问 github 版本的 repo
- windows - Flutter 运行时出错:java.lang.IllegalAccessError