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

来自 debian 团队的各大语言性能测试数据

  •  2
     
  •   Rwing · 2021-01-26 14:18:09 +08:00 · 12895 次点击
    这是一个创建于 1428 天前的主题,其中的信息可能已经有所发展或是发生改变。

    debian 团队对每一个语言进行了 10 种算法的测试,结果包括了耗时,内存等等数据,并且基本上各语言都是最新版.

    但是原始数据看起来不是很直观,我把它汇总做了个柱状图,结果如下.

    更多子项的柱状图数据在这里

    https://github.com/Rwing/debian-benchmarks-game-visualization

    原始数据来自 debian

    https://benchmarksgame-team.pages.debian.net/benchmarksgame/

    第 1 条附言  ·  2021-01-27 08:51:49 +08:00
    一觉醒来,这么多关注,有几点错误可能要解释下:
    1.这个数据确实不是 debian 团队官方,作者是 Isaac Gouy,关于他的更多资料我没查到
    2.汇总数据采用的算法是所有 10 项测试以第一名为基准的比值相加而不是绝对时间结果相加
    3.go 为什么比 java 还慢?事实上,在 10 项测试中 go 胜出了 7 项,但是在输的其中一项里落后 java 一倍还多,导致整体落后了
    4.内存的原始数据似乎就有些问题,我不信 pascal 只需要 8byte 内存😂
    所有测试代码参见他的原始仓库
    https://salsa.debian.org/benchmarksgame-team/benchmarksgame
    119 条回复    2021-01-27 15:13:31 +08:00
    1  2  
    beyondex
        1
    beyondex  
       2021-01-26 14:28:26 +08:00   ❤️ 6
    C# 猛,基本都在前 3~4 名普遍比 go 快(内存占用则大得多)。
    wdwwtzy
        2
    wdwwtzy  
       2021-01-26 14:35:15 +08:00
    rust 这么屌吗?
    liprais
        3
    liprais  
       2021-01-26 14:36:00 +08:00   ❤️ 36
    语言圣战预警,无关人员迅速撤离!
    Austaras
        4
    Austaras  
       2021-01-26 14:38:11 +08:00
    rust 天下第一!
    scr
        5
    scr  
       2021-01-26 14:38:17 +08:00   ❤️ 5
    node 这么能打的吗, 比第一名只差 4 倍...
    Leviathann
        6
    Leviathann  
       2021-01-26 14:40:25 +08:00   ❤️ 2
    c# 快于 java 快于 go
    可以开战了
    baiyi
        7
    baiyi  
       2021-01-26 14:42:37 +08:00   ❤️ 1
    震天的战鼓再次被敲响,有请各语言选手入场
    baiyi
        8
    baiyi  
       2021-01-26 14:45:04 +08:00
    为什么 rust 这么能打,性能高,内存还低
    qwerthhusn
        9
    qwerthhusn  
       2021-01-26 14:45:04 +08:00
    我走上路,来个能打的
    0clickjacking0
        10
    0clickjacking0  
       2021-01-26 14:50:48 +08:00
    不能光看直接比较吧,感觉不是很可靠,就像 1 楼老哥说的,要看内存占比
    0clickjacking0
        11
    0clickjacking0  
       2021-01-26 14:51:18 +08:00
    @0clickjacking0 光看时间,少打了字
    chenqh
        12
    chenqh  
       2021-01-26 14:52:54 +08:00
    如果 py 有 php 那么快就好了
    chenqh
        13
    chenqh  
       2021-01-26 14:53:19 +08:00
    能有 node 那么快就好了
    neoblackcap
        14
    neoblackcap  
       2021-01-26 15:00:09 +08:00
    @scr node 跟 Java 都是一样有强大 JIT 的语言,性能高没啥奇怪
    janxin
        15
    janxin  
       2021-01-26 15:06:05 +08:00
    什么版本的 Ruby ?看起来是没 jit 支持的版本,要不然应该是 Python 垫底
    rogwan
        16
    rogwan  
       2021-01-26 15:08:49 +08:00 via iPhone
    一直知道 py 怂,没想到这么怂
    wdwwtzy
        17
    wdwwtzy  
       2021-01-26 15:09:12 +08:00
    @Leviathann 这个应该是共识了吧...开不了战....
    rogwan
        18
    rogwan  
       2021-01-26 15:09:26 +08:00 via iPhone
    erlang 不是很强吗,怎么也这么弱?
    oneonesv
        19
    oneonesv  
       2021-01-26 15:11:23 +08:00
    @janxin
    64-bit Ubuntu quad core
    ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-linux]
    --jit
    Evilk
        20
    Evilk  
       2021-01-26 15:12:32 +08:00
    PHP-8 开启 JIT,还是这么慢吗?
    Mohanson
        21
    Mohanson  
       2021-01-26 15:13:14 +08:00 via Android   ❤️ 4
    看了下他们用的代码,mandelbrot,第一名的 c++ 代码用了向量指令加多线程,第 3 名 rust 多线程,第 8 的 c 只用了向量指令,再往后的很多老实人,内置基础数据单线程实现。没太大说服力,所以同一梯队内的语言(c,cpp,rust 这种算同一梯队)性能全看写代码的人愿不愿意花时间去扣
    liuxu
        22
    liuxu  
       2021-01-26 15:18:29 +08:00
    rust 天下无敌!
    wtks1
        23
    wtks1  
       2021-01-26 15:19:36 +08:00 via Android
    c#很符合用户感知...
    Jirajine
        24
    Jirajine  
       2021-01-26 15:20:25 +08:00
    @Mohanson #21 理论上来说全都应该使用语言内置基础类型、最简实现才能实际地体现出各语言的性能。
    love
        25
    love  
       2021-01-26 15:20:31 +08:00   ❤️ 1
    我大 JS 果然是脚本语言一哥的存在
    nutting
        26
    nutting  
       2021-01-26 15:24:31 +08:00
    想学这个 rust,未来能取代 java 吗
    wms
        27
    wms  
       2021-01-26 15:24:54 +08:00   ❤️ 2
    所有 C 不是第一的测试都是忽悠人的, 不管他是谁发布的
    kikyous
        28
    kikyous  
       2021-01-26 15:25:26 +08:00 via Android
    node 确实能打
    westoy
        29
    westoy  
       2021-01-26 15:29:05 +08:00
    @rogwan

    erlang 强在 SMP, 还有整套 OTP 处理框架带来的高可用和高容错, 性能没人吹的啊
    Jirajine
        30
    Jirajine  
       2021-01-26 15:35:19 +08:00 via Android
    @wms 你这样说就过于绝对了,且不说工程上的复杂度导致 c 难以一直使用最优化的实现。一个最简单的例子,c 的 null terminated 字符串。
    hongweiliuruige
        31
    hongweiliuruige  
       2021-01-26 15:35:41 +08:00
    node 厉害了
    CommandZi
        32
    CommandZi  
       2021-01-26 15:36:50 +08:00
    为什么你这个图表没有 Swift ?
    Flymachine
        33
    Flymachine  
       2021-01-26 15:40:12 +08:00
    @nutting rust 是想取代 C++的,他们觉得 C++太复杂了,也不够安全,所以设计了 rust,“更安全的 C++”。然而现实是 C++转 rust 的人少,python 转 rust 的人反而更多。
    henryhu
        34
    henryhu  
       2021-01-26 15:47:49 +08:00
    ruby 3 据说快了 3 倍,不知道这个测试用的 ruby 是哪个版本
    felixin
        35
    felixin  
       2021-01-26 15:52:16 +08:00 via Android
    haskell 这种没背景的语言竟然和 go 一样快?

    很感兴趣 c#换成 f#会怎么样,都是.net 平台性能应该接近

    函数式编程是未来的趋势
    wms
        36
    wms  
       2021-01-26 15:53:43 +08:00
    @Jirajine C string 除了 length 比较低效,其他有什么地方低效了? 并且 length 很多情况也不必其他语言的 string 低效, 比如字面量的时候可以用 sizeof
    longaiwp
        37
    longaiwp  
       2021-01-26 15:56:07 +08:00
    语言圣战即将展开,无关人等迅速撤离!
    whileFalse
        38
    whileFalse  
       2021-01-26 15:56:15 +08:00   ❤️ 2
    感想如下:
    1. Rust 好快,竟然比 C 快
    2. C#好快,比其他的带 VM 的快辣么多
    3. Node 好快,比其他的解释型快辣么多
    4. Go 好慢,作为纯编译型连带 VM 的都打不过
    5. Python 好慢。
    hws8033856
        39
    hws8033856  
       2021-01-26 16:01:18 +08:00
    C#该不会是编译成 native 了吧?这是作弊啊
    wdwwtzy
        40
    wdwwtzy  
       2021-01-26 16:04:37 +08:00   ❤️ 1
    @hws8033856
    应该不是,哈哈

    .NET SDK 5.0.100
    Host Version: 5.0.0; Commit: cf258a14b7
    <ServerGarbageCollection>true
    no1xsyzy
        41
    no1xsyzy  
       2021-01-26 16:05:30 +08:00
    @Flymachine 其实是 Python 盯着半天 C++ 了,有个更舒服的选择自然转了。(我快了
    no1xsyzy
        42
    no1xsyzy  
       2021-01-26 16:06:38 +08:00
    @felixin Haskell 的背景是偏学术界的……
    哲学系教授玩 Haskell 比我溜( pandoc 太好用了
    zsj950618
        43
    zsj950618  
       2021-01-26 16:13:03 +08:00 via Android   ❤️ 5
    标题党了,这和 Debian 没有任何关系,任何人都可以在 pages.debian.net 上新建网页,这是 Debian 的 gitlab 对应的 pages 网址。你总不能说我在 xxx.github.io 上发布了个东西,就说是 GitHub 团队发布的吧。
    favourstreet
        44
    favourstreet  
       2021-01-26 16:20:44 +08:00
    @Mohanson 说得在理啊,果然没有什么问题是 SHOW ME CODE 解决不了的。话说只要愿意去扣,c/cpp/rust 这仨甚至可以人为给它们随便安排名次
    Flymachine
        45
    Flymachine  
       2021-01-26 16:27:19 +08:00
    @no1xsyzy 哈哈,我们做 C++的其实也苦 C++久矣。所以 Rust 一出我就关注了,但实在是项目不好搬。主要是 Rust 和 C++主要区别就在线程安全性和节省心智精力上,对已有项目提升不大,迁移后可能问题更多。也是头大,只能慢慢先在新项目上试试。其实 GO 也不错,也是 Google 觉得 C++太复杂搞出来的。
    anthongy
        46
    anthongy  
       2021-01-26 16:30:08 +08:00   ❤️ 3
    所有 C 不是第一的测试都是忽悠人的, 不管他是谁发布的
    zjsxwc
        47
    zjsxwc  
       2021-01-26 16:32:07 +08:00
    pypy 性能可以和 c 媲美吧,应该没有测 pypy 版的 python
    fiveelementgid
        48
    fiveelementgid  
       2021-01-26 16:35:11 +08:00 via Android
    辣鸡 C#,Go 语言(。ノω\。)并发才是最快的!
    什么?有实验数据?
    我不听我不听( ≧Д≦),肯定是高并发的 go 快
    lewis89
        49
    lewis89  
       2021-01-26 16:35:51 +08:00
    @Flymachine #45 用 C++的场景 基本上跟 GC 无缘了吧,你能忍受 golang 的 GC 停顿,那为什么不转 Java,Java jit 之后吊打 golang,而且又是企业级的 GC
    rogwan
        50
    rogwan  
       2021-01-26 16:37:47 +08:00
    @westoy #29 印象里 WhatsApp 创始人吹过,说 WhatsApp 性能强悍,就是因为是用 erlang 写的
    shuax
        51
    shuax  
       2021-01-26 16:37:50 +08:00
    C/C++ yyds
    williamherry
        52
    williamherry  
       2021-01-26 16:37:55 +08:00
    可怜的 Ruby
    laike9m
        53
    laike9m  
       2021-01-26 16:48:16 +08:00 via Android   ❤️ 1
    说真的,谈性能还是要看场景
    tigerZhang
        54
    tigerZhang  
       2021-01-26 17:04:44 +08:00
    rust 有点出乎意料
    BBCCBB
        55
    BBCCBB  
       2021-01-26 17:19:18 +08:00
    @rogwan 他说的这个性能强应该是 io 密集型场景下, whatsapp 这种基本是 io 密集型的应用, 用 erlang 跑, actor 模型很合适. 异步 io 相比同步 io 效率提升非常明显. 很多推送系统也是在用 erlang. 但要单核跑算法这种, 性能还是不够快的.

    就像 python 有了 asyncio, 在 io 密集型应用下也能实现高并发.
    Jirajine
        56
    Jirajine  
       2021-01-26 17:21:02 +08:00 via Android
    @wms 取子串、取后缀。
    再就是由于其糟糕的依赖管理,某些算法 /数据类型在其他语言你可以轻易导入其他人很好的实现,在 c 里你可能就懒得用了。
    当然我不是说 c 不行,我只是说 c 并不是**永远**最快的(尤其是 real world c programs )。
    gamexg
        57
    gamexg  
       2021-01-26 17:25:08 +08:00 via Android
    rust 居然比 c 还牛,
    go 和 rust 的差距很大啊
    wms
        58
    wms  
       2021-01-26 17:27:28 +08:00
    @Jirajine 人这测试性能, 你说算法数据结构实现了,没在 C 里用, 这不是纯杠吗?
    取子串、取后缀 没看出 C 比其他语言哪里慢了.
    Kilerd
        59
    Kilerd  
       2021-01-26 17:31:30 +08:00
    LONG LIVE THE RUST 。

    go 比 java 还慢是我没想到的。

    python 比 ruby 还快也是我没想到的。

    Python 牛逼就完事了。
    SuperMild
        61
    SuperMild  
       2021-01-26 18:02:54 +08:00
    Go 果然很能打啊,速度仅比 Java 慢一点点,内存低好多。C# 和 Java 的内存占用太可怕了。
    zealinux
        62
    zealinux  
       2021-01-26 18:05:36 +08:00
    Elixir 会比 Erlang 快多少?
    Jirajine
        63
    Jirajine  
       2021-01-26 18:06:54 +08:00 via Android
    @wms 取子串需要添加 null byte,取后缀需要先 count 。
    语言的标准实现、库、生态当然会影响你写出程序的性能。就算你强行替换成最优实现,也只是理论上可行。比如标准的 null terminated 字符串性能慢,你改成 fat pointer 的实现,那你调用别人的库 /别人调用你的库都需要额外转换,性能还是不行。
    AndyAO
        64
    AndyAO  
       2021-01-26 18:25:12 +08:00
    @nutting #26
    Rust 和 Java 不是一类东西,Rust 是 C 的继任者,主要用于高性能,低延迟,对硬件精确控制的情景.
    包括而不限于浏览器内核,操作系统.
    AndyAO
        65
    AndyAO  
       2021-01-26 18:27:54 +08:00
    Ruby 的优势不在于性能,而在于语法.
    所以完全可以跑在其他平台以提高性能,例如 JRuby,相信有 JVM 加持,性能应该会提升很多.
    AndyAO
        66
    AndyAO  
       2021-01-26 18:32:31 +08:00
    对 C#的性能表示满意,最近正准备开始学 C#.
    no1xsyzy
        67
    no1xsyzy  
       2021-01-26 18:33:06 +08:00   ❤️ 1
    @Flymachine 主要因为 Python 抛弃成本比较小。
    go vs rust 也是经典了。go 败在 gc,rust 败在生命周期控制麻烦。
    lc1450
        68
    lc1450  
       2021-01-26 18:35:16 +08:00
    @anthongy #46 github 有个 ripgrep rust 写的,比 grep 快,当时我也挺震惊的
    lysS
        69
    lysS  
       2021-01-26 18:37:10 +08:00   ❤️ 1
    @Kilerd
    @whileFalse
    楼主统计只是时间,原始数据 go 比 java 快的项更多,而且内存一般少一半
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go.html
    starcraft
        70
    starcraft  
       2021-01-26 18:41:33 +08:00 via Android
    这就尴尬了。搞办公室政治 裁 Java 转 go 快圆不下去了。java 真就 yyds 。
    wangkun025
        71
    wangkun025  
       2021-01-26 18:43:33 +08:00
    Ruby 哭晕在厕所。
    GiantHard
        72
    GiantHard  
       2021-01-26 18:54:52 +08:00 via Android
    @felixin 应该会慢很多,因为 F# 默认用的 immutable 数据结构
    back0893
        73
    back0893  
       2021-01-26 18:56:16 +08:00
    php 居然这么快..
    jessun1990
        74
    jessun1990  
       2021-01-26 19:06:02 +08:00
    @scr 哈哈,上班看到这句话笑出声。
    daysv
        75
    daysv  
       2021-01-26 19:12:50 +08:00
    node+rust 挺好
    FightPig
        76
    FightPig  
       2021-01-26 19:25:23 +08:00
    rust 牛不意外 ,不过这个 ruby 应该没用 Ruby 3 Fiber 的,要不 py 是垫底的
    Cbdy
        77
    Cbdy  
       2021-01-26 19:51:42 +08:00 via Android
    Go 居然比 Java 都慢,.NET 要崛起了
    sampeng
        78
    sampeng  
       2021-01-26 19:56:44 +08:00 via iPhone
    有啥意义? 500ms 以下的在 99%得场景下是够用了的。
    wjwwq
        79
    wjwwq  
       2021-01-26 20:34:20 +08:00
    看了下原始数据的链接,听良心的,各种语言都有,代码也放上去了
    felixin
        80
    felixin  
       2021-01-26 20:42:41 +08:00 via Android
    neoblackcap
        81
    neoblackcap  
       2021-01-26 22:33:58 +08:00
    @rogwan 是能支持大规模的用户,以及扩展好。whatsapp 没记错好像是 yahoo 出来的人搞的,复用以前的经验罢了
    germain
        82
    germain  
       2021-01-26 22:53:20 +08:00
    和环境编译时间成反比
    CEBBCAT
        83
    CEBBCAT  
       2021-01-27 00:38:50 +08:00 via Android
    有没有人把编译速度也加入到横评之中?
    12101111
        84
    12101111  
       2021-01-27 01:25:31 +08:00
    rust/c/c++后端都可以是 llvm,(现在 rust 也有一个 gcc 的后端了,只是处于初级阶段,但是有公司赞助,应该不会弃坑)性能差距就是

    1. 标准库. 这一点 C 垫底,rust 只有一个官方的标准库,个人认为代码质量很高,可读性很强,但是一些算法存在优化空间。c++有 3 个主流的标准库( STL )( gcc 的 libstdc++, llvm 的 libc++ 还有 ms 的 vc++),充斥着大写字母,下划线和模板,可读性很差,几乎没人愿意看这玩意。
    2. 编译器优化。理论上 rust 因为编译期信息更多,优化会更好,但是仍有一些因 bug 导致较慢。c/c++的优化已经很成熟了。
    3. 代码的实现。rust > c++ > c 当然想要对着编译器和 perf 写代码,这三个都可以是最快的,大不了上 intrinsics 和 asm

    go 的编译速度很快,但 go 编译器的优化并不充分。

    C#的编译器 /运行时是.NET 5.0, 单就 C# 7.0 的 Span<T>就能让 Java 的性能再也不可能比得过 C#,Java 天生设计缺陷,为了根本不存在的向前兼容性不改这堆烂摊子,没治了。

    Pascal 文物语言,再快也没人用。不知道为什么有几个项目内存占用那么低。

    v8 优化到极致的虚拟机,吊打一众脚本语言没任何问题。

    虽然 CPython 很拉垮,但是比 PHP 都拉垮就太丢人了。最近看到一个叫 Pyston 的解释器,号称性能更快且兼容 CPython,可惜最新版是闭源的。
    ryd994
        86
    ryd994  
       2021-01-27 07:33:01 +08:00 via Android
    @Jirajine 你可以自己实现啊。说 C 难用我接受。说 C 慢这是不可能的。
    crclz
        87
    crclz  
       2021-01-27 08:29:04 +08:00   ❤️ 1
    即使 C#比 go 慢 20 倍,我也愿意在开发者使用 C#。因为 go 的语言特性美其名曰“简洁”,实际就是缺胳膊少腿。
    hobochen
        88
    hobochen  
       2021-01-27 09:24:30 +08:00
    @12101111 好像 STL 不是那么回事儿
    hatsuyuki
        89
    hatsuyuki  
       2021-01-27 09:28:28 +08:00
    @Flymachine 感觉 Ruby 转 Rust 的人更多
    yoohohoho
        90
    yoohohoho  
       2021-01-27 09:51:05 +08:00
    看完两个疑问,node 为啥这么快? golang 为啥这么慢?
    hikari2
        91
    hikari2  
       2021-01-27 10:23:33 +08:00
    @CommandZi 他这个测试平台应该是在 WIN PC 上测试的
    cmdOptionKana
        92
    cmdOptionKana  
       2021-01-27 10:42:42 +08:00
    @yoohohoho golang 有 gc 有 runtime,本来就不是 c/c++ 那个级别的,只能和 c#, java 比,看楼主附言 “在 10 项测试中 go 胜出了 7 项,但是在输的其中一项里落后 java 一倍还多,导致整体落后了”,因此可以认为 c#, java, golang 三者大体上差别不算大,属第二梯队,比第三梯队的 php, python 快一大截。
    Myprajna
        93
    Myprajna  
       2021-01-27 10:43:31 +08:00
    pascal ?没看错吧,是中学微机课学的那个 pascal 吗?
    SuperMild
        94
    SuperMild  
       2021-01-27 10:46:49 +08:00
    @Myprajna 没想到性能这么优秀,没有大厂支持真是太可惜了。
    h82258652
        95
    h82258652  
       2021-01-27 10:53:01 +08:00
    貌似值得投入一下去学 rust 了
    missdeer
        96
    missdeer  
       2021-01-27 11:16:55 +08:00
    没想到 Go 慢这么多,还以为这些年下来已经优化得很好了呢
    除掉 C/C++和 Go,剩下的也就 C#值得用了
    Flymachine
        97
    Flymachine  
       2021-01-27 11:24:04 +08:00
    @lewis89 你遗漏了 QT 场景,不是所有的 C++项目都要求压榨性能到极限。遇到不允许使用中间语言的场景,go 这种带 GC 的语言挺不错的。
    当然,JAVA 和 C#现在也可编译成本地机器码了。
    Flymachine
        98
    Flymachine  
       2021-01-27 11:30:46 +08:00
    @no1xsyzy 我觉得他们的侧重点不一样吧。go 天生就是为了高并发,做高性能网络服务。rust 野心大一些,想替代 C++,场景更底层一些。rust 还有 rust-embedded 分支,搞 Cortex-M 的嵌入式开发尝试。
    lewis89
        99
    lewis89  
       2021-01-27 11:31:06 +08:00
    @Flymachine #97 pyQT 足矣,另外 QT 的 binder 这么多 ,以 C++的上手难度 跟成本,如果不是为了极高的实时性以及性能压榨,完全没有必要上 C++
    MrCard
        100
    MrCard  
       2021-01-27 11:33:17 +08:00   ❤️ 1
    node 好强呀,出乎意料地快。但怎么就是取代不了 python 呢?一样的动态语言,但人工智能都是用 python 来写
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5923 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:28 · PVG 10:28 · LAX 18:28 · JFK 21:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.