【发布时间】:2009-09-04 23:10:01
【问题描述】:
寻找神奇的 ParallelHashMap 类
更简洁地说,您可以使用多个线程来加快 HashMap 查找速度吗?是否已经有任何实现可以做到这一点?
在我的项目中,我们需要在内存中维护一个大型对象映射。我们从不在地图创建后对其进行修改,因此地图是严格只读的。但是,此地图上的读取和查找性能对于应用程序的成功绝对至关重要。将安装应用程序的系统通常具有许多可用的硬件线程。然而,我们的查找只使用一个线程从 HashMap 中检索值。使用多个线程(可能在一个池中)的分而治之方法是否有助于提高查找速度?
我的大部分谷歌搜索都没有结果——返回大量关于并发问题而不是解决方案的结果。任何建议都将不胜感激,但如果您知道开箱即用的解决方案,那您就太棒了。
另外值得注意的是,所有键和值都是不可变的。哈希码值在实例化时预先计算并存储在对象本身中。
至于实现的细节,Map 中有大约 35,000 个项目。键和值都是对象。键是自定义查找键,值是字符串。目前,我们每秒最多可以处理大约 5,000 次查找(这包括一些其他逻辑的一些开销,但主要瓶颈是地图实现本身)。但是,为了跟上我们未来的性能需求,我希望这个数字达到每秒大约 10,000 次查找。按照大多数正常标准,我们当前的实现速度很快 - 只是我们需要它更快。
在我们的 35,000 个值的映射中,我们平均大约有一次哈希码冲突,所以我猜测哈希码分布合理。
【问题讨论】:
-
您能解释一下为什么您的查找速度很慢吗?您的分析器发现了什么?
标签: java multithreading collections parallel-processing