编译型语言-rust与解释性语言-js的性能简单对比和分析

node

let j = 0;
for (let index = 0; index < 10000; index++) {
    j += index
}
console.log(j)

0.03s user 0.03s system 56% cpu 0.103 total

rust

fn main() {
    let mut j = 0;
    for i in 0..10000 {
        j += i;
    }
    println!("{}", j);
}
  • cargo run

0.01s user 0.01s system 5% cpu 0.398 total

  • cargo build --release

0.00s user 0.00s system 1% cpu 0.312 total

对比

nodecargo runcargo build --release
程序本身和它所调用的库中的子例程在用户态运行所消耗的 CPU 时间。0.03s0.01s0.01s
程序在内核态运行和执行系统调用所消耗的 CPU 时间0.03s0.01s0.00s
程序执行期间,CPU 的平均使用率56%5%1%
程序从开始到结束所消耗的总时间0.1030.3980.312

1、从这里看其实node的执行速度是比rust快的,但同时他需要的资源也很多。
2、rust代码在build之后执行速度和效率是高很多的
这里应该是因为cargo run运行的包包含了一些debug时需要的信息,所以会占用一些资源。同时加上–release之后rust编译器会开启一些默认的优化。

分析

理论上来说解释型语言应该没有编译型语言快的,但实际效果确实反过来了。个人感觉应该是v8中的jit起了作用,可能在执行了几次for循环所在的代码块时,v8就把这部分代码转换为机器码了。同时因为有jit,所以也可以再运行时做一些优化来提升程序执行的速度
rust --release时cpu利用率这么低,可能是会有静态分析模块已经把这段代码优化成了直接输出最终结果的代码。比如静态分析时发现变量“j”和“i”没有任何依赖,只有简单的计算就可以在编译阶段执行该代码并获取最终结果赋值到变量"j" ?然后大部分时间其实是消耗在打印上了。当然这只是猜的,哈哈哈。

结论

node的资源利用率可能更高一点,比较合适后台系统之类。rust可能更合适一些底层库的开发,比如操作系统、数据库、编译器、物联网应用。
从这个对比结果对一句话可能有更深的体会:不同的编程语言适合不同的场景,不能盲目的选择。

当然我这里的demo可能比较简单,可能在其他场景下,数据又会不同。目前的高级语言性能其实都差不多,主要可能还是因为大部分语言已经发展了很长时间,里面的大佬已经把细节优化的很好了,包括现在硬件不停地升级,开发者很难感知出来区别。

本人正在找(web前端、工具链方向、IDE方向、小程序容器方向),有合适的老板们请联系

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值