• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

nodejs如何实现多线程?

nodejs 程序猿 4年前 (2021-12-27) 52次浏览 已收录 0个评论

Node可以在不新增额外线程的情况下,依然可以对任务进行并发处理 —— Node.js是单线程的。它通过事件循环(event loop)来实现并发操作。

Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。

安装方法

npm install threads_a_gogo

下载测试源码

git clone http://github.com/xk/node-threads-a-gogo.git  

导入模块代码

var tagg= require('threads_a_gogo');

API

tagg= require('threads_a_gogo') //生成tagg object
var thread = tagg.create( /* no arguments */ ) //生成 thread object
var thread_pool = tagg.createPool( numberOfThreads ) //生成 thread pool
thread.load("boot.js").eval("boot()").emit("go").on("event", cb) 
//thread读取boot.js文件 执行boot(),发送event go,并且监听 event 事件 cb(err,result)
thread_pool.load('path') //pool中的任意(.all 为全部)thread 读取path file
pool.any.eval( program, cb ) //pool中的任意(.all 为全部)thread执行program

为什么要用多线程?

1.平行执行,无需排队,快速。

2.公平性,所有线程统一优先级。

3.完整利用资源,让更多的CPU参与task的处理。

4.所有线程共用一个储存地址。

实例

我们先来做一个简单的测试,用斐波那契数组来看一下,加入了多线程的node有多么的强悍:(测试机器为4CPU)没有使用TAGG的正常情况,异步也帮不了我们应对cpu密集型任务

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<mark style="color:transparent">来源gaodaimacom搞#代%码网</mark>(){
console.log(fibo (40));
back();
})
process.nextTick(function(){
console.log(fibo (40));
back();
})

我们模拟了8个异步的行为,测试用的node v0.8.16版本,所以process.nextTick还是异步方法。最后我们输出结果为:

165580141
165580141
165580141
165580141
165580141
165580141
165580141
165580141
no thread: 23346ms

以上就是nodejs如何实现多线程?的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:nodejs如何实现多线程?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址