首页 > 代码库 > NodeJS和C++的性能比较(转)

NodeJS和C++的性能比较(转)

 

  前段时间做了个实验,测试了1E9次的空循环在NodeJS和C++中的执行用时。于是我和小伙伴们瞬间就惊呆了,NodeJS的性能是要逆天吗?虽然我一直都在抱怨v8引擎在各种犄角旮旯的优化做的太恶心了,但无论如何它的基本性能高是不可否定的。
#include <cstdio>
#include <ctime>
int main(void){
  int t=clock();
  for(int i=0;i<1E9;i++);
  printf("%d\n",clock()-t);
  return 0;
}
console.time("test");
for(var i=0;i<1E9;i++);
console.timeEnd("test");

技术分享
  NodeJS是要逆天?速度比C++还快?得到这个结果只是因为C++的编译没有开启最大优化而已。开启最大优化编译之后可以得到
技术分享
  所以C++比NodeJS快是肯定的,但是从这个结果来看并没快多少。很多人就持疑了,测试的循环体中只有一个空语句,是v8引擎把它优化掉了吧?但要是优化掉了,那一千多毫秒的时间是怎么跑出来的呢?也许这个测试不能说明问题,那我们就来做个实际点的测试,对一个长度为1E6的整型数组排序。这里偷了个懒,C++直接用了C标准库中的qsort函数,JavaScript用了上一篇中的排序算法。#include <cstdio>
#include <cstdlib>
#include <ctime>
#define L 1E6
int main(void){
  int *a=new int[L];
  for(int i=0;i<L;i++)a[i]=rand();
  int t=clock();
  qsort(a,L,sizeof(int),[](const void *a,const void *b)->int{
    return *(int*)a-*(int*)b;
  });
  printf("%d\n",clock()-t);
  delete a;
  return 0;
}
function sort(a){
  var s=[0,a.length-1],p=0,l,r,i,j,v;
  while(s.length>p){
    l=i=s[p++],r=j=s[p++],v=a[i];
    while(i<j){
      while(a[j]>=v&&i<j)j--;
      a[i]=a[j];
      while(a[i]<=v&&i<j)i++;
      a[j]=a[i];
    };
    a[i]=v;
    if(i-1>l)s.push(l,i-1);
    if(i+1<r)s.push(i+1,r);
  };
};
var s,i,t;
for(i=0,s=[];i<1E6;i++)s.push(Math.random()*1E6|0);
t=new Date;
sort(s);
console.log(new Date-t);

技术分享
  C++是比NodeJS快,但性能比较通常是用耗时的数量级来衡量的,这两个结果取对数之后基本没什么差异,C++真心没比NodeJS快多少。所以,比起其它一大堆Web编程语言,NodeJS的性能还是非常有优势的。

NodeJS和C++的性能比较(转)