Node.js中Rust插件用于CPU密集型任务是否具备实用价值?
关于Rust Neon插件与Node.js在CPU密集型任务中的性能对比疑问
测试背景
我是Rust及Node.js插件开发的新手,最近在探索Neon示例并做了修改,用来测试嵌套循环这类CPU密集型任务在Rust和JS中的性能差异。
测试代码
index.js 代码
const cpuCount = require("."); let st = Date.now(); let counter = cpuCount.get(); console.log(`Rust: ${Date.now() - st}ms ${counter}`); st = Date.now(); let bigcounter = 0; for (let index = 0; index < 1000_00; index++) { for (let internalIndex = 0; internalIndex < 1000_00; internalIndex++) { bigcounter += 1; } } console.log(`JS: ${Date.now() - st}ms ${bigcounter}`);
lib.rs 代码
use neon::prelude::*; fn get_num_cpus(mut cx: FunctionContext) -> JsResult<JsNumber> { let mut counter=0f64; for _n in 0..1000_00 { for _x in 0..1000_00 { counter+=1f64; } } Ok(cx.number(counter)) //Ok(cx.number(num_cpus::get() as f64)) } #[neon::main] fn main(mut cx: ModuleContext) -> NeonResult<()> { cx.export_function("get", get_num_cpus)?; Ok(()) }
初始测试结果
Rust: 107258ms 10000000000 JS: 11056ms 10000000000
这让我产生疑问:Rust插件用于CPU密集型任务是否有意义?难道JS已经快到能接近编译型静态语言的性能水平了?
注:这绝非语言基准测试,只是我遇到的多维数组遍历计算的特定场景。Node版本:16 LTS,Rust版本:1.69.0
更新:使用Release构建后的结果
按照建议改用release构建后,测试结果如下:
Rust: 9487ms 10000000000 JS: 10916ms 10000000000
现在Rust性能略优于JS,但我想知道:这1429ms的性能提升,是否值得引入双语言代码库带来的维护成本?
内容的提问来源于stack exchange,提问作者Lau
相关产品推荐
相关产品推荐

