【发布时间】:2018-10-22 00:31:36
【问题描述】:
我正在寻找具有最有效的“添加项目”并发操作的集合。 Scala 或 Java 都不错。
我通常:
- 插入 100.000 个条目,一次一个
- 不在乎订单
- 仅在没有追加时读取和清除集合。所以不重要
此外,它应该与多线程一起工作(因此存在并发约束)。但是我需要它在没有并发的情况下最有效:并发安全的设计在没有并发访问的情况下不应该有太大的影响。
我使用这个集合来记录性能测量。这就是为什么不偏向过多的实际性能应该是最有效的。但是,由于集合大小可能很大并且事先不知道,它应该有效地应对大小增加。
那么最好使用哪个集合?
我目前使用mutable.ListBuffer 和buffer.synchronized{ ... } 围绕追加(和清除)操作。我尝试使用具有类似synchronized{ ... } 块的var buf: List (scala),但它严重影响了测量结果。
【问题讨论】:
-
"插入 100.000 个条目,一次一个","它应该与多线程一起工作"。嗯,是哪一个?
-
您是否考虑过异步运行
add操作?不管最终收集还是实际添加是否同步? -
ConcurrentLinkedQueue 看起来不错
-
@Michael 我的意思是两件事:(1)典型的最大大小是 100.000 个条目; (2) 唯一的关键操作是“添加一项”
-
项数无关。您是同时添加还是顺序添加?
标签: java scala collections concurrency