V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ecloud
V2EX  ›  Rust

感慨一下, rust 的性能竟然这么好

  •  
  •   ecloud · 2022-08-02 09:35:09 +08:00 · 7836 次点击
    这是一个创建于 623 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本公司某个业务逻辑,大体上是 redis 里面 pop 一条数据,做一个简单的业务转换,生成的新数据 push 回 redis

    纯 C 版本是 20+us ,oc ( mrc )版本是 100+us ,最新用 rust 重构的我昨天刚测试了下,19us

    也没有做什么特别的优化,只是开了 lto

    好吧,我感觉是写 C 的那个老哥 memcpy 用的太多了,如果多用指针可能会更快。但是你 TM 真的敢在 C 里面飞指针?

    还有一个可能的原因,C 版本的数据都是用 sprintf 来拼接的字符串,rust 版本直接使用的一个库,该库的底层逻辑是拼接&[u8]
    18 条回复    2022-09-22 00:48:30 +08:00
    miniliuke
        1
    miniliuke  
       2022-08-02 09:42:14 +08:00   ❤️ 2
    rust 约等于加过安全限制的 C++,由于一些限制 safe 代码的上限和 C/C++还是有一些差距,但是下限高得多
    Leviathann
        2
    Leviathann  
       2022-08-02 09:47:15 +08:00
    安全抽象的威力,ripgrep 也已经展示过了
    stephenyin
        3
    stephenyin  
       2022-08-02 10:14:27 +08:00   ❤️ 2
    理论上如果 C 执行慢于 Rust ,一定是 C 写得不够好。不过 Rust 确实优化的很不错。
    changnet
        4
    changnet  
       2022-08-02 10:14:59 +08:00   ❤️ 5
    怎么不敢在 C 里面用指针?不用指针写什么 C

    我写 C 经常各种强转,比如把一个 int32 拷贝进一个 buffer 缓冲区,直接就把 char *类型的缓冲区强转成 int32 *来进行赋值,用 memcpy 什么的慢得跟个啥似的。只要控制好应用场景、硬件架构就不会有什么问题

    用 C 不就是这点好处么
    ecloud
        5
    ecloud  
    OP
       2022-08-02 10:23:05 +08:00
    @stephenyin 道理的确是这个道理。不过在普遍低能的某行业里,我门之前的那个 C 程序的 20+us 的性能已经傲视群雄了,其实市面上大部分的 C++程序员也就会一些 boost 和 qt 罢了,双向链表不一定能写出来呢。我们上游第三方的 sdk 还一大堆 cp936/gbk 的中文 log/注释到现在都没人改
    Morii
        6
    Morii  
       2022-08-02 10:31:42 +08:00
    看起来之前 C 的版本可优化的地方很多
    ColorfulBoar
        7
    ColorfulBoar  
       2022-08-02 13:02:08 +08:00   ❤️ 3
    min
        8
    min  
       2022-08-02 13:50:50 +08:00
    用 c 、c++不动态分配内存? 感觉是很奇怪的用法啊
    wamson
        9
    wamson  
       2022-08-02 15:10:40 +08:00 via iPhone
    追性能但又不想用 cpp 的话,我会选 go 。话说最近不是出了个 carbon 么(逃
    ipwx
        10
    ipwx  
       2022-08-02 15:12:18 +08:00   ❤️ 3
    我不仅敢在 C 语言里面飞指针,我还敢在 C++ 里面飞指针(逃
    novolunt
        12
    novolunt  
       2022-08-02 15:33:23 +08:00
    @Morii 最近的 zig 各项性能都比 c/rust 强
    lusi1990
        13
    lusi1990  
       2022-08-02 15:39:00 +08:00 via Android
    我觉得这时候瓶颈在 redis 读写上
    Nugine0
        14
    Nugine0  
       2022-08-02 15:59:51 +08:00 via Android
    @changnet 强转时不考虑对齐吗?小心哪天爆炸……
    Nugine0
        15
    Nugine0  
       2022-08-02 16:00:44 +08:00 via Android
    @novolunt 然而用 zig 写的 bun 正苦于修 segfault
    DonkeyBenjamin
        16
    DonkeyBenjamin  
       2022-08-04 10:21:28 +08:00
    想转 carbon/zig 的赶紧去添砖加瓦啊,1.0 还没出,正需要 contributors 呢😄
    wewewefff
        17
    wewewefff  
       2022-09-08 11:32:08 +08:00
    现在都是考虑用 rust 重构了
    JohnBull
        18
    JohnBull  
       2022-09-22 00:48:30 +08:00
    飞指针咋了?飞指针+写时拷贝走起~~ ^0^
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3475 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:52 · PVG 19:52 · LAX 04:52 · JFK 07:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.