我考虑了两个具有相似概念的集合 - 来自Scala的ParHashMap
和来自Java的ConcurrentHashMap。它们都具有相同的时间复杂度,并且它们都是线程安全且无锁的,但它们仅基于引擎盖下的不同概念 - 相应的trie和哈希表。这个推理引出了一个问题:为什么我们需要来自Scala的ParHashMap,而Java中有ConcurrentHashMap?
答案 0 :(得分:4)
ConcurrentHashMap
是一个线程安全的Map<>
实现。如果您有多个线程同时访问它们,它们将同步。
ParHashMap
是一个并行集合。如果您在此处执行操作(例如map()
,filter()
,aggregate()
),Scala将为您并行化处理(类似于Spark,但仅限于单个JVM)。
总而言之,ConcurrentHashMap
给出了原语来同步线程以实现并发,ParHashMap
负责同步和执行。
修改:请注意ParHashMap
本身不一定是线程安全的。我们的想法是从单个线程调用它的方法,让并行性由并行数据结构本身处理。