标签:
原文地址: 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的性能还是非常有优势的。
标签:
原文地址:http://www.cnblogs.com/mengxuan/p/4180395.html