本文摘自PHP中文网,作者青灯夜游,侵删。
本篇文章给大家介绍一下Nodejs进行多线程处理的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学习:《nodejs 教程》】
安装方法
1 | npm install threads_a_gogo
|
下载测试源码
导入模块代码
1 | var tagg= require( 'threads_a_gogo' );
|
API
1 2 3 4 5 6 | tagg= require( 'threads_a_gogo' )
var thread = tagg.create( )
var thread_pool = tagg.createPool( numberOfThreads )
thread.load( "boot.js" ).eval( "boot()" ).emit( "go" ).on( "event" , cb)
thread_pool.load( 'path' )
pool.any.eval( program, cb )
|
为什么要用多线程?
1.平行执行,无需排队,快速。
2.公平性,所有线程统一优先级。
3.完整利用资源,让更多的CPU参与task的处理。
4.所有线程共用一个储存地址。
实例
我们先来做一个简单的测试,用斐波那契数组来看一下,加入了多线程的node有多么的强悍:(测试机器为4CPU)没有使用TAGG的正常情况,异步也帮不了我们应对cpu密集型任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | function fibo (n) {
return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}
var n=8
function back(){
if (!--n) return console.timeEnd( 'no thread' );
}
console.time( 'no thread' );
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
process.nextTick( function (){
console.log(fibo (40));
back();
})
|
我们模拟了8个异步的行为,测试用的node v0.8.16版本,所以process.nextTick还是异步方法。最后我们输出结果为:
阅读剩余部分
相关阅读 >>
html5+nodejs实现websocket即时通讯的示例代码分享
浅析nodejs中的buffer
浅谈nodejs中内置模块的基本用法
nodejs怎么创建文件
windows环境下nodejs多版本间如何切换?
nodejs、npm、nvm三者有什么关系?
深入了解调试nodejs程序的方法
nodejs有什么用?
浅谈conda安装nodejs版本过低问题的解决方法
使用nodejs+robotjs控制鼠标键盘
更多相关阅读请进入《nodejs》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 浅谈Nodejs如何进行多线程处理