为什么我们需要来自 Scala 的 ParHashMap 而来自 Java 的 ConcurrentHashMap

Why do we need for ParHashMap from Scala while there is ConcurrentHashMap from Java

我考虑了两个具有相似概念的集合 - 来自 Scala 的 ParHashMap 和来自 Java 的 ConcurrentHashMap。它们都具有相同的时间复杂度,并且都是线程安全和无锁的,但它们只是基于不同的底层概念——相应的 trie 和 hash table。这个推理引发了一个问题:为什么我们需要来自 Scala 的 ParHashMap 而来自 Java?

的 ConcurrentHashMap

ConcurrentHashMap 是线程安全的 Map<> 实现。如果您有多个线程同时访问它,它们将是同步的。

ParHashMap为并列合集。如果您在这里执行操作(如 map()filter()aggregate()),Scala 将为您并行化它(类似于 Spark,但仅在单个 JVM 中)。

总而言之,ConcurrentHashMap 给出了同步线程的原语以实现并发,ParHashMap 负责同步和执行。

编辑:注意ParHashMap本身不一定是线程安全的。这个想法是从单个线程调用它的方法,并让并行数据结构本身处理并行性。