首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
V2EX  ›  分享创造

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

  •  
  •   mind3x · 241 天前 · 1095 次点击
    这是一个创建于 241 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人目前的工作因为涉及到一些内存中的高并发缓存实现,有用到 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 0.10 => 1.33 的各种更新与修正:Box 语法,transmute 全部改写为 Box::into_raw/from_raw,减少 unsafe 使用,解决各种废弃 API 的使用……
    • 增加测试并修正发现的 segfault
    • cargo 项目定义及标准的代码目录组织(虽然我是 git mv 在移动文件,但因为同时修改内容很多,还是被 git 认为是 rm 和 add,并不是我故意要抹掉原作者的 git history)
    • Travis CI

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

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

    2 回复  |  直到 2019-03-18 22:03:53 +08:00
        1
    Kilerd   241 天前
    tab 做缩进????????
        2
    mind3x   241 天前
    @Kilerd 这个是因为原项目的缩进如此。为了方便 diff,暂时没有跑 rustfmt。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3967 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 07:03 · PVG 15:03 · LAX 23:03 · JFK 02:03
    ♥ Do have faith in what you're doing.