-1

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

$ 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 个主进程和两个分叉进程。

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


更新:

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

也许我不明白?

4

2 回答 2

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(进程和子线程),但内存已满......

感谢卡玛;)

于 2013-04-09T11:06:24.283 回答
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 个进程是有意义的,因为您正在使用clusterAPI,并且您必须拥有 2 个 CPU 或 1 个具有 2 个内核的 CPU。


我在上面运行了你的代码,因为我有 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
于 2013-04-10T13:01:35.310 回答