Cha*_*lie 3 windows concurrency 64-bit process node.js
我正在运行并发测试,为了简洁起见,为每个欺骗性的http请求定义了一个进程.它适用于多达64个请求/进程,但折叠为65.我在I5笔记本电脑上运行Window 7(64位),带有4GB Ram.
在运行测试的同时我打开了一个Chrome(带有少量选项卡),我希望操作系统的常见系统进程也会产生一些影响,但我对最低级别的node.js了解得太少,无法理解问题在于.
例如,有一篇文章建议在2GB 64位Windows XP系统上运行8000多个进程:
http://blogs.technet.com/b/markrussinovich/archive/2009/07/08/3261309.aspx
但我遇到的64个儿童过程数字相当显眼.
有任何想法吗?
Far*_*hat 11
Well节点是异步的,没有阻塞,只有当前脚本才可以完美地处理多个连接,这意味着高并发性,它会使用你所有的CPU,但每个进程只能使用一个核心,因为Node是没有线程.因此从技术上讲,建议拥有的流程与核心一样多,每个流程一个核心.在这种情况下,在高并发性上,节点集群将使用所有CPU.如果你超过这个,你就是在浪费你的RAM并在你的操作系统调度程序上投入额外的工作.除此之外,每个nodejs进程都有一个启动时间.因此,在运行时创建nodejs进程非常昂贵.
来自Node.JS文档:
这些子节点仍然是V8的全新实例.假设每个新节点至少启动30ms,内存为10mb.也就是说,你不能创造成千上万的.
结束语最好的做法就是将CPU分配为CPU内核的数量,即:
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('death', function(worker) {
console.log('worker ' + worker.pid + ' died');
cluster.fork();
});
} else {
// Worker processes have a http server.
http.Server(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
}
Run Code Online (Sandbox Code Playgroud)
我们实际上有一个生产服务器,这样做可能需要大约1000个并发,并且不到10毫秒的延迟服务于hello世界.
| 归档时间: |
|
| 查看次数: |
4847 次 |
| 最近记录: |