加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

是否有可用于Java的HashMap的并行处理实现?它甚至可能吗?

发布时间:2020-12-15 05:15:40 所属栏目:Java 来源:网络整理
导读:正在寻找神奇的ParallelHashMap类 更简洁一点,您可以使用多个线程来加速HashMap查找吗?是否有任何实现已经执行此操作? 在我的项目中,我们需要在内存中维护一个大的对象映射.我们从不在创建地图后修改地图,因此地图严格是只读的.但是,此映射上的读取和查找
正在寻找神奇的ParallelHashMap类

更简洁一点,您可以使用多个线程来加速HashMap查找吗?是否有任何实现已经执行此操作?

在我的项目中,我们需要在内存中维护一个大的对象映射.我们从不在创建地图后修改地图,因此地图严格是只读的.但是,此映射上的读取和查找性能对于应用程序的成功至关重要.安装应用程序的系统通常具有许多可用的硬件线程.然而,我们的查找只使用单个线程从HashMap中检索值.使用多个线程(可能在池中)的分而治之的方法是否有助于提高查找速度?

我的大多数谷歌搜索都没有结果 – 返回了很多关于并发问题而不是解决方案的结果.任何建议都会受到赞赏,但如果您知道开箱即用的解决方案,那就太棒了.

另外值得注意的是,所有键和值都是不可变的.散列码值是预先计算的,并在实例化时存储在对象本身中.

至于实现的细节,Map中有大约35,000个项目.键和值都是对象.键是自定义查找键,值是字符串.目前,我们每秒可处理大约5,000次查找(这包括一些其他逻辑的开销,但主要的瓶颈是地图实现本身).但是,为了满足我们未来的性能需求,我希望每秒可以获得大约10,000次查找.按照大多数正常标准,我们目前的实施速度很快 – 只是我们需要它更快.

在我们35,000个值的Map中,我们平均有一个哈希码冲突,所以我猜测哈希码的分布相当合理.

解决方法

因此,您的哈希码是预先计算的,并且equals函数很快 – 在这种情况下,您的hashmap应该非常快.

您是否已经分析了您的应用程序以证明hashmap确实是瓶颈?

如果你有多个应用程序线程,它们都应该能够同时从hashmap执行自己的获取 – 因为你没有修改地图,所以你不需要在外部同步获取.使用散列映射的应用程序是否能够充分利用所有硬件线程?

由于哈希表的内容是不可变的,因此可能值得查看perfect hashing – 使用完美的哈希函数,您不应该在哈希表中发生冲突或需要链接,这可能会提高性能.我不知道手头的java实现,但在C/C++中知道,有gperf

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读