性能测试 lua VS java VS nodejs VS c++

来源:互联网 发布:阿里云域名邮箱 编辑:程序博客网 时间:2024/05/16 01:30

主机: 酷睿i5-4200U, 4G DDR3



求每秒执行开平方次数
测试结果:


>>>=== chrome 45.0.2454.85 m: (浏览器因为还要执行其他的渲染操作所有降低了js的效率)
1s Math.sqrt do 436849      // 解释: 1  秒 执行 sqrt() 函数的次数 436849 次
1s Math.sqrt do 432051
1s Math.sqrt do 430482
1s Math.sqrt do 418521
1s Math.sqrt do 431072
1s Math.sqrt do 428187
1s Math.sqrt do 436510
1s Math.sqrt do 431959
1s Math.sqrt do 427543
1s Math.sqrt do 428449
avg 1s use 430162.3 counts  // 解释 平均 1s 执行 43万次


>>>=== node 0.12:
1s Math.sqrt do 8054416
1s Math.sqrt do 8158594
1s Math.sqrt do 8331699
1s Math.sqrt do 8255630
1s Math.sqrt do 8331886
1s Math.sqrt do 8283210
1s Math.sqrt do 8135069
1s Math.sqrt do 8268996
1s Math.sqrt do 8316290
1s Math.sqrt do 8210444
avg 1s use 8234623.4 counts


>>>=== node 4.0: (相比前一个版本, 效率确实提高了呢, v8每次更新都有很大变化啊)
1s Math.sqrt do 8758179
1s Math.sqrt do 8309689
1s Math.sqrt do 8874033
1s Math.sqrt do 8808449
1s Math.sqrt do 8852651
1s Math.sqrt do 8835441
1s Math.sqrt do 8793725
1s Math.sqrt do 8846457
1s Math.sqrt do 8817173
1s Math.sqrt do 8813811
avg 1s use 8770960.8 counts 8百万


>>>=== Lua 5.2.3 (lua出乎意料的慢, 如果直接调用math.sqrt, 速度可以提升80万次)
1s Math.sqrt do 3045604
1s Math.sqrt do 3098687
1s Math.sqrt do 3041617
1s Math.sqrt do 3029663
1s Math.sqrt do 3112521
1s Math.sqrt do 3004033
1s Math.sqrt do 3037430
1s Math.sqrt do 3098603
1s Math.sqrt do 3042392
1s Math.sqrt do 3054487
avg 1s use 3056503.7 counts 3百万


>>>=== c++ vs2012: (王道!)
1s Math.sqrt do 50864476
1s Math.sqrt do 53466949
1s Math.sqrt do 53503141
1s Math.sqrt do 53798758
1s Math.sqrt do 53991526
1s Math.sqrt do 53135591
1s Math.sqrt do 54014958
1s Math.sqrt do 53591906
1s Math.sqrt do 53595438
1s Math.sqrt do 53486753
avg 1s use 53344949 counts 5千万


>>>=== Java build 1.7.0_80-ea-b05: (java 真的很快!)
1s Math.sqrt do 45902963
1s Math.sqrt do 47347316
1s Math.sqrt do 47736195
1s Math.sqrt do 47530654
1s Math.sqrt do 47538389
1s Math.sqrt do 46810018
1s Math.sqrt do 35977214
1s Math.sqrt do 37011350
1s Math.sqrt do 46313556
1s Math.sqrt do 47359388
avg 1s use 44952704 counts 4千万



真是一目了然的性能测试呢!!

下面是测试用的代码:



-- ==== Lua =================================================================a = os.clock();b = 0;c = 0;avg = 0;fn = function()     return math.sqrt(35155412);endwhile c<10 do    fn();    b=b+1;    if (os.clock() - a >= 1) then        a = os.clock();        print('1s Math.sqrt do', b);        avg = avg+b;        c = c+1;        b = 0;    endendprint('avg 1s use', avg/c, 'counts');


// ==== JavaScript ==========================================================var a = Date.now();var b = 0;var c = 0;var avg = 0;var fn = function() {    return Math.sqrt(35155412);};while (c<10) {    fn();    b++;    if (Date.now() - a >= 1000) {        a = Date.now();        console.log('1s Math.sqrt do', b);        avg += b;        ++c;        b = 0;    }}console.log('avg 1s use', avg/c, 'counts');


// ==== Java =================================================================public class M {public static void main(String[] args) {long a = System.currentTimeMillis();int b = 0;int c = 0;int avg = 0;while (c<10) {    fn();    b++;    if (System.currentTimeMillis() - a >= 1000) {        a = System.currentTimeMillis();        log("1s Math.sqrt do ", b);        avg += b;        ++c;        b = 0;    }}log("avg 1s use ", avg/c, " counts");}public static double fn() {return Math.sqrt(35155412);}public static void log(Object ...a) {StringBuilder buf = new StringBuilder();for (int i=0; i<a.length; ++i) {buf.append(a[i]);}System.out.println(buf.toString());}}


// ==== C++ ===================================================================#include <iostream>#include <time.h>#include <math.h>using namespace std;float fn() {    return sqrt(35155412);}int main(){    time_t a, curr;    int b = 0;    int c = 0;    int avg = 0;    time(&a);    while (c<10) {        fn();        b++;        time(&curr);        if (curr > a) {            time(&a);            cout << "1s Math.sqrt do " << b << endl;            avg += b;            ++c;            b = 0;        }    }    cout << "avg 1s use " << avg/c << " counts" << endl;    return 0;}


0 0