具有最快(并发)添加操作的集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有最快(并发)添加操作的集合相关的知识,希望对你有一定的参考价值。

我正在寻找一个具有最有效的“添加项目”并发操作的集合。 Scala或Java很好。

我通常:

  • 插入100.000s条目,一次一个
  • 不关心订单
  • 只有在没有追加时才能阅读并清除收藏品。所以不重要

此外,它应该使用多个线程(因此并发约束)。但是,当没有并发性时,我需要它最有效:当没有并发访问时,并发安全的设计不应该产生太大的影响。

我使用此集合来记录性能测量。这就是为什么最好不要偏向太多实际性能的原因。然而,由于收集尺寸可能很大并且事先不知道,因此它应该有效地应对尺寸增加。

那么最好使用哪个系列?

我目前使用mutable.ListBufferbuffer.synchronized{ ... }附加(和清除)操作。我试图使用var buf: List(scala)与类似的synchronized{ ... }块,但它严重影响了测量。

答案

我会说CurrentLinkedQueue。使用CAS进行O(1)插入。因此,在适度负载下,您可能不会有更快的添加。如果您的负载非常高,您可能需要考虑使用LinkedBlockingQueue

既然你说它可能会添加单线程,那么使用CLQ和CAS将是你最好的选择。

以上是关于具有最快(并发)添加操作的集合的主要内容,如果未能解决你的问题,请参考以下文章

代码片段 - Golang 实现集合操作

C#并行编程-并发集合

java基础入门-多线程同步浅析-以银行转账为样例

Alfred常见使用

ConcurrentModificationException:并发修改异常

金蝶handler中 collection 代码片段理解