为什么 NodeJS C/C++ 插件比纯 C 更快

Why is NodeJS C/C++ addon faster then pure C

本文关键字:插件 更快 C++ NodeJS 为什么      更新时间:2023-10-16

我尝试使用NodeJS插件,我在C语言中有以下代码:

int fib(int n) {
    if (n == 0) return 0;
    else if (n == 1) return 1;
    else return (fib(n-1) + fib(n-2));
}
int main(int argc, char *argv[]) {
    fib(atoi(argv[1]));
}

在 NodejS 插件中:

.JS:

const addon = require('./build/Release/addon');
console.log(addon.fib(process.argv[2]));

C++:

using namespace v8;
int fib(int n) {
    if (n == 0) return 0;
    else if (n == 1) return 1;
    else return (fib(n-1) + fib(n-2));
}
void Method(const FunctionCallbackInfo<Value>& args) {
    Isolate* isolate = args.GetIsolate();
    args.GetReturnValue().Set(Uint32::New(isolate, fib(args[0]->Uint32Value())));
}
void init(Local<Object> exports) {
    NODE_SET_METHOD(exports, "fib", Method);
}
NODE_MODULE(addon, init)

我尝试计算数字 50 的 fib(( 并得到以下结果:

  • 清洁 C: 2m 36s
  • NodeJS 插件:1 分 22 秒

谁能解释为什么 NodeJS 插件比纯 C 更快?我不是C/C++专家,但我认为纯C会更快。

谢谢!

很可能

您手动编译了C程序,而没有指定-O3或其他优化选项。虽然node-gyp或任何工具来编译 Node.js插件肯定是在打开最大优化的情况下编译的。