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

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

  •  
  •   mind3x · 2019-03-18 20:42:14 +08:00 · 3081 次点击
    这是一个创建于 2058 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人目前的工作因为涉及到一些内存中的高并发缓存实现,有用到 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

    5 条回复    2020-11-30 00:22:17 +08:00
    Kilerd
        1
    Kilerd  
       2019-03-18 21:07:06 +08:00
    tab 做缩进????????
    mind3x
        2
    mind3x  
    OP
       2019-03-18 22:03:53 +08:00
    @Kilerd 这个是因为原项目的缩进如此。为了方便 diff,暂时没有跑 rustfmt。
    pslydhh
        3
    pslydhh  
       2020-11-23 21:54:16 +08:00
    果然是 Cliff Click 做的那个,用开放地址做的吧?用 Rust 写是不是会很别扭。。。?
    pslydhh
        4
    pslydhh  
       2020-11-24 12:27:48 +08:00
    好像没有 remove 方法吧?
    mind3x
        5
    mind3x  
    OP
       2020-11-30 00:22:17 +08:00
    @pslydhh 是比较别扭,因为换工作后来就放下了 XD
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3342 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:56 · PVG 18:56 · LAX 02:56 · JFK 05:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.