javascript代码实例教程-Node.js性能初窥-计算性能(Qt/C++,Golang,Node.js)

发布时间:2019-02-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-Node.js性能初窥-计算性能(Qt/C++,Golang,Node.js)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 大家都知道Node.js的单进程非阻塞模型适合于任务密集性(I/O)而不是计算密集型.那么到底有多不适合计算呢?下面做一个简单的测试.

测试硬件平台如下:

脑型号 苹果 Macmini6,2 Lunch Box

操作系统 Windows 8 Enterprise 64位 ( DirectX 11 )

处理器         英特尔 第三代酷睿 i7-3615QM @ 2.30GHz 四核

内存         16 GB ( 三星 DDR3 1600MHz )

主硬盘         APPLE HDD HTS541010A9E662 ( 1 TB )

 

软件平台:

Node.js 0.10.21

Qt5.2 beta1

Golang 1.2 R3

 

测试方法:

每一趟计算斐波那契8次.总共10趟(一共80次)计算总时间.

Node.js 不使用cluster模块.测试代码如下:

[javascript] 

function fibo (n) {  

    return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;  

}  

VAR n = 8;  

function back(){  

    if(!--n) {  

        return console.timeEnd('total time');  

    }  

}  

  

console.time('<span style="font-family:Arial,Helvetica,sans-serif">total time</span>');  

  

for(var i = 0; i < 8; ++i){  

    PRocess.nextTick(function(){  

        console.LOG(fibo (40));  

        back();  

    });  

}  

10次总时间132393ms

 

.....额有人会说有cluster模块可以以多个进程的方式处理,效率会提升.那我们来看看使用cluster之后的效果如何

[javascript] 

//cluster  

var cluster = require('cluster');  

var numCPUs = 8;    //我的cpu是四核八线程  

function fibo (n) {  

    return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;  

}  

console.time('8 cluster');  

if (cluster.isMaster) {  

    // Fork workers.  

    for (var i = 0; i < numCPUs; i++) {  

        cluster.fork();  

    }  

    var i = 8;  

    cluster.on('exIT', function(worker, code, signal) {  

        if(!--i){  

            console.timeEnd('8 cluster');  

            process.exit(0);  

        }  

    });  

} else {  

    console.log(fibo (40));  

    process.exit(0);  

}  

10次总时间30322ms

 

下面是Qt(C++)中做同样的处理(多线程)

[cpp]  

#include <QThread>  

#include <QDebug>  

#include <QTime>  

#include <QtConcurrent>  

  

int fibo(int n)  

{  

    return n > 1? fibo(n-1) + fibo(n-2):1;  

}  

  

int main(int argc, char *argv[])  

{  

    QList<int> lists;  

    for (int i = 0; i < 8; ++i)  

    {  

        lists.apPEnd(40);  

    }  

  

    QTime start;  

    start.start();  

  

    QList<int> thumbnails = QtConcurrent::blockingMapped(lists, fibo);  

    foreach (int i, thumbnails)  

    {  

        qDebug() << i;  

    }  

    qDebug() <<"total time is :  "<< start.elapsed();  

}  

Debug编译10次总时间14279ms

Release编译10次总时间8280ms

 

还有一个单线程的也是做同样的计算,代码就不贴了只贴结果

Debug编译10次总时间64864ms

Release编译10次总时间37790ms

 

Golang单线程代码如下:

[plain] 

package main  

  

import (  

    "fmt"  

    "time"  

)  

  

func fibonacci(num int) int {  

    if num < 2 {  

        return 1  

    }  

    return fibonacci(num-1) + fibonacci(num-2) //我不记得golang有没有三目运算符了......  

}  

  

func main() {  

  

    start := time.Now()  

  

    for i := 0; i < 8; i++ {  

        nums := fibonacci(40)  

        fmt.Println(nums)  

    }  

  

    end := time.Now()  

  

    fmt.Println("total time:", end.Sub(start).Nanoseconds()/1000/1000)  

}  

十次总时间73910ms.

 

Golang 使用8线程计算:

[cpp] 

package main  

  

import (  

    "fmt"  

    "time"  

    "runtime"  

)  

  

func fibonacci(num int) int {  

    if num < 2 {  

        return 1  

    }  

    return fibonacci(num-1) + fibonacci(num-2) //我不记得golang有没有三目运算符了......  

}  

  

func main() {  

  

    ch := make(chan int, 8)  

    runtime.GOMAxpROCS(8)  

  

    start := time.Now()  

  

    for i := 0; i < 8; i++ {  

        go func(){  

            nums := fibonacci(40)  

            ch <- nums  

        } ()  

        //fmt.Println(nums)  

    }  

  

    for i := 0; i < 8; i++{  

        fmt.Println(<-ch)  

    }  

  

    end := time.Now()  

  

    fmt.Println("total time:", end.Sub(start).Nanoseconds()/1000/1000)  

}  

10次总时间14780ms

 

详细测试结果如下:

无cluster 8cluster 8线程Debug 8线程Release 单线程Debug 单线程Release Golang单线程 Golang 8线程

13212 3031 1502 847 6538 3804 7413 1443

13253 3029 1429 841 6473 3768 7371 1420

13233 3014 1429 810 6488 3812 7380 1442

13232 3044 1414 811 6467 3757 7420 1545

13465 2980 1466 818 6477 3782 7387 1507

13244 3018 1414 805 6504 3758 7377 1465

13213 3061 1414 831 6461 3771 7373 1494

13192 3025 1402 857 6512 3816 7391 1463

13143 3075 1398 801 6476 3747 7402 1503

13206 3045 1411 859 6468 3775 7396 1498

132393 30322 14279 8280 64864 37790 73910 14780

 

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-Node.js性能初窥-计算性能(Qt/C++,Golang,Node.js)全部内容,希望文章能够帮你解决javascript代码实例教程-Node.js性能初窥-计算性能(Qt/C++,Golang,Node.js)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。