c - Node js 与 C 的比较

标签 c node.js

在我的双核机器上,Node JS 比用 C 编写的等效程序运行得更快。

node 是否优化得如此之好以至于它实际上更高效,还是我的 C 程序有问题导致它变慢了?

Node js代码:

var Parallel = require("paralleljs"); 

function slow(n){
    var i = 0; 
    while(++i < n * n){}
    return i; 
}

var p = new Parallel([20001, 32311, 42222]);
p.map(slow).then(function(data){
    console.log("Done!"+data.toString()); 
});

C 代码:

#include <stdio.h>
#include <pthread.h>

struct thread_s {
    long int n; 
    long int r; 
}; 

void *slow(void *p){
    thread_s *t = (thread_s*)p; 
    long int i = 0; 
    while(++i < t->n * t->n){}
    t->r = i; 
    pthread_exit( 0 ); 
}

thread_s arr[] = {{20001, 0}, {32311, 0}, {42222, 0}};

int main(){
    pthread_t t[3]; 
    for(int c = 0; c < 3; c++){
        pthread_create(&t[c], NULL, slow, &arr[c]); 
    }
    for(int c = 0; c < 3; c++){
        pthread_join(t[c], NULL); 
    }
    printf("Done! %ld %ld %ld\n", arr[0].r, arr[1].r, arr[2].r); 
    return 0; 
}

最佳答案

您正在对玩具程序进行基准测试,这不是比较编译器的好方法。此外,您正在执行的循环没有副作用。它所做的只是将 i 设置为 n * n。应该优化循环。您是否在未优化的情况下运行?

尝试计算一些真实的东西来近似于您稍后将在生产中应用的工作负载。例如,如果您的代码包含大量数字,您可以对一个简单的矩阵乘法进行基准测试。

关于c - Node js 与 C 的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19065976/

相关文章:

c - 遍历字符串并在 C 中用空格分隔输入

在函数c中更改数组

c - 如何读取动态分配矩阵的元素,其中每个元素都是一个结构

C:如何使用while循环计算多位整数的位数?

node.js - 配置 Visual Studio 的任务运行程序资源管理器使用哪个 NPM?

javascript - 使用 NodeJS 更新全局变量

c - 在C中读取ELF文件的正确方法

javascript - 为什么这仍然返回一个 promise ?

javascript - 更新模型时如何更新 hasMany 关联?

javascript - 如何将 headless 浏览器与 selenium webdriver 和 chromedriver 一起使用