NodeJS和C++的性能比較(轉)


原文地址: http://www.web-tinker.com/article/20374.html

 

  前段時間做了個實驗,測試了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的性能還是非常有優勢的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM