为什么node.js运行两个进程?

时间:2013-04-08 17:40:25

标签: node.js

这是官方文档中的一个简单示例:

$ 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 中看到的内容: htop

有两个主进程和两个分叉进程。

为什么呢? 我以为我应该只有2个进程!


更新

这里我在VM CentOS上运行: centos http://i.stack.imgur.com/GQiiN.png

也许我不明白?

2 个答案:

答案 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