浅谈Nodejs如何进行多线程处理


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家介绍一下Nodejs进行多线程处理的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

Threads à gogo 是nodejs 的原生模块,使用这个模块可以让nodejs 具备多线程处理功能。【推荐学习:《nodejs 教程》】

安装方法

1

npm install threads_a_gogo

下载测试源码

1

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

导入模块代码

1

var tagg= require('threads_a_gogo');

API

1

2

3

4

5

6

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密集型任务

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》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...