我正在寻找一个具有最有效的“添加项目”并发操作的集合。 Scala 或 Java 都不错。
我通常:
- 插入 100,000 个条目,一次一个
- 不关心顺序
- 仅在没有追加时读取并清除集合。所以并不重要
此外,它应该适用于多个线程(因此存在并发约束)。但我需要它在没有并发时最有效:并发安全的设计在没有并发访问时不应该产生太大影响。
我使用这个集合来记录性能测量。这就是为什么不让实际性能偏差太多应该是最有效的。但是,由于集合大小可能很大并且无法提前知道,因此它应该有效地应对大小增加。
那么哪个集合最适合使用?
我目前在追加(和清除)操作中使用了 mutable.ListBuffer
和 buffer.synchronized{ ... }
。我尝试使用带有类似 synchronized{ ... }
block 的 var buf: List
(scala),但它严重影响了测量。
最佳答案
我会说ConcurrentLinkedQueue 。使用 CAS 插入的时间复杂度为 O(1)。因此,在中等负载下,您可能不会有更快的插入速度。如果您的负载非常非常高,您可能需要考虑 LinkedBlockingQueue .
既然您说添加时可能是单线程的,那么使用 CLQ 和 CAS 将是您的最佳选择。
关于java - 具有最快(并发)添加操作的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50294880/