为什么我们需要来自 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
本身不一定是线程安全的。这个想法是从单个线程调用它的方法,并让并行数据结构本身处理并行性。
我考虑了两个具有相似概念的集合 - 来自 Scala 的 ParHashMap
和来自 Java 的 ConcurrentHashMap。它们都具有相同的时间复杂度,并且都是线程安全和无锁的,但它们只是基于不同的底层概念——相应的 trie 和 hash table。这个推理引发了一个问题:为什么我们需要来自 Scala 的 ParHashMap 而来自 Java?
ConcurrentHashMap
是线程安全的 Map<>
实现。如果您有多个线程同时访问它,它们将是同步的。
ParHashMap
为并列合集。如果您在这里执行操作(如 map()
、filter()
、aggregate()
),Scala 将为您并行化它(类似于 Spark,但仅在单个 JVM 中)。
总而言之,ConcurrentHashMap
给出了同步线程的原语以实现并发,ParHashMap
负责同步和执行。
编辑:注意ParHashMap
本身不一定是线程安全的。这个想法是从单个线程调用它的方法,并让并行数据结构本身处理并行性。