这是官方文档中的一个简单示例:
$ node test-node.js
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
console.log(numCPUs);
for (var i = 0; i < numCPUs-1; i++) {
cluster.fork();
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
// Workers can share any TCP connection
// In this case its a HTTP server
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
}
这是我在 htop 中看到的内容:
有两个主进程和两个分叉进程。
为什么呢? 我以为我应该只有2个进程!
更新
这里我在VM CentOS上运行: http://i.stack.imgur.com/GQiiN.png
也许我不明白?
答案 0 :(得分:1)
可能,节点创建系统线程!
我输入控制台
[root@centos-1 ~]# ps axf|grep node
1435 pts/1 Sl+ 0:00 | \_ node /usr/local/bin/coffee test.js
1445 pts/0 S+ 0:00 \_ grep node
[root@centos-1 ~]#
但是htop列出~6进程0_O(进程和子线程),但是满内存......
感谢carma;)
答案 1 :(得分:0)
我创建了一个运行exec
的小型节点服务器。 exec将生成一个新进程(不是新线程;节点不使用线程)。这是过程:
ps -ef | grep 32038
me 32038 15776 0 08:54 pts/7 00:00:00 node index.js
me 32116 32038 1 08:55 pts/7 00:00:00 find /home/me -name *.js
我查看了github,但在我粗略看来,我没有看到http.createServer
分叉或产生新进程。有2个进程是有意义的,因为您使用的是cluster
API,您必须拥有2个CPU或1个CPU和2个内核。
我在上面运行了你的代码,因为我有4个核心,所以我得到了4个进程:
ps -ef | grep node
me 1822 15776 0 09:02 pts/7 00:00:00 node server.js
me 1827 1822 0 09:02 pts/7 00:00:00 /opt/node-v0.10.0-linux-x64/bin/node /home/me/workspace/node6proc2/server.js
me 1828 1822 0 09:02 pts/7 00:00:00 /opt/node-v0.10.0-linux-x64/bin/node /home/me/workspace/node6proc2/server.js
me 1830 1822 0 09:02 pts/7 00:00:00 /opt/node-v0.10.0-linux-x64/bin/node /home/me/workspace/node6proc2/server.js