请教大牛们有关 NodeJS 多线程的问题,现在你们都是用的哪个库呢?

2017-07-19 17:20:08 +08:00
 de6ugger

网上看的例子,如下,准备改造成多线程的方式。 tagg2 安装编译失败,tagg 不支持 windows。

var express = require('express');
var app = express();

var fibo = function fibo(n) {
    return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}

app.get('/', function(req, res) {
    var n = fibo(~~req.query.n || 1);
    res.send(n.toString());
});
app.listen(8124);

当遇到大数字的时候,一个用户就会导致 cpu 满掉,其他用户就会响应不了请求了。 应该怎么解决这个问题呢?

4871 次点击
所在节点    Node.js
11 条回复
ufo22940268
2017-07-19 17:22:13 +08:00
看下 cluster 能不能解决你的需求?
de6ugger
2017-07-19 17:38:36 +08:00
@ufo22940268
感觉这个的提升不是很大,cpu 的核数相关(我是双核的机器),第三个用户出现的时候还是会悲剧。
```
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
var express = require('express');
var app = express();
var fibo = function fibo (n) {
return n > 1 ? fibo(n - 1) + fibo(n - 2) : 1;
}
app.get('/', function(req, res){
var n = fibo(~~req.query.n || 1);
res.send(n.toString());
});
app.listen(8124);
console.log('listen on 8124');
}
```
Mirana
2017-07-19 17:40:37 +08:00
结果缓存起来啊。。
cloud107202
2017-07-19 17:54:13 +08:00
额。。把递归改成动态规划就解决了啊
这种 cpu-bound 的业务逻辑,开大于核心数的线程是没用的
de6ugger
2017-07-19 17:54:31 +08:00
@Mirana 这是个好思路,感谢。
不过还是想再了解一下 Node.js 多线程的东西。
用了 npm 上 fibers,可能是姿势不对,貌似没提升。
de6ugger
2017-07-19 17:54:57 +08:00
@cloud107202 感谢指点
plqws
2017-07-19 18:13:15 +08:00
node 上用多线程的原因大部分是逻辑需要,而不是性能需要。
单纯的性能需求用 cluster 就好了。
6324tv
2017-07-19 21:24:40 +08:00
不要用递归就好了
xmadi
2017-07-19 21:31:57 +08:00
多起几个实例 用 pm2 管理 在实例上层做负载均衡 这样的话代码层面就不用改动了
qiuyk
2017-07-20 08:54:23 +08:00
你这个线程再多也是 cpu 密集问题 一样会卡死的= =

一般是 io 密集才考虑多线程的解决方案 cpu 密集你只能改进算法了 用空间换时间咯 不过计算量太大一样会有种卡卡的感觉

或者...

换电脑吧(逃)
de6ugger
2017-07-20 10:05:32 +08:00
@plqws
@6324tv
@xmadi
@qiuyk
谢谢各位大佬的指点。
小弟茅塞顿开!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/376458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX