介绍一个 Rust 版的高性能 lock free concurrent hashmap

2019-03-18 20:42:14 +08:00
 mind3x

本人目前的工作因为涉及到一些内存中的高并发缓存实现,有用到 Cliff Click 大神早年的作品,即 Java 版的NonblockingHashMap, 号称可以 scale 到 768 个 CPU。其思路主要是基于基础的 CAS(比较-交换)原语和精心设计的状态机,来实现 lock-free 的高并发哈希表。当然 lock free 不等于 wait free,但细节这里就不讨论了。

因为自己对 Rust 很感兴趣,就想把 Java 实现移植到 Rust。在 github 上找到 5 年前已经有人做过了类似的工作, 但是是基于当时的 Rust 0.10 ,现在已经完全无法编译,5 年内也没有任何更新。所以就自己 fork 了一份,一边学 rust 一边改旧代码一边加测试,现在看起来已经可以正常运行了:

https://github.com/rlei/nonblockinghashmap

我目前所做的改动:

下一步的计划仍然是增加测试(原作者的测试比较简单),修改接口更符合 rust 标准 API 习惯,重构和清理现有的代码,最终是希望能说服老板用在自己的项目上。

欢迎围观,谢谢 Star 和 PR :D

2895 次点击
所在节点    分享创造
5 条回复
Kilerd
2019-03-18 21:07:06 +08:00
tab 做缩进????????
mind3x
2019-03-18 22:03:53 +08:00
@Kilerd 这个是因为原项目的缩进如此。为了方便 diff,暂时没有跑 rustfmt。
pslydhh
2020-11-23 21:54:16 +08:00
果然是 Cliff Click 做的那个,用开放地址做的吧?用 Rust 写是不是会很别扭。。。?
pslydhh
2020-11-24 12:27:48 +08:00
好像没有 remove 方法吧?
mind3x
2020-11-30 00:22:17 +08:00
@pslydhh 是比较别扭,因为换工作后来就放下了 XD

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/545912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX