html多线程实现方法,nodejs如何实现多线程?

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

7121f0ba9908e8c709f69ba41b971c8d.png

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');

APItagg= 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(){

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值