2013-04-08 86 views
0

这是从官方文档一个简单的例子:为什么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个主流程和两个叉过程。

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


UPDATE:

在这里,我在虚拟机上运行的CentOS: centos http://i.stack.imgur.com/GQiiN.png

也许我不明白?

+1

看起来你运行该程序的两倍。 – 2013-04-08 17:45:49

+0

我是怎么做到的? – zoh 2013-04-08 18:01:29

+0

你好吗?从命令行?如何在测试之间杀死它?这将需要更多的信息来弄清楚发生了什么。 – 2013-04-08 18:39:00

回答

1

可能,节点创建系统线程!

我'进入控制台

[[email protected] ~]# 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 
[[email protected] ~]# 

但HTOP上市〜6个过程0_O(进程和线程分),但完整的内存...

感谢CARMA)

+0

嗨@zoh。我没有关闭这个问题,但你应该知道node.js不会创建'threads'。也许你打算说'过程'。 – Jess 2013-04-12 03:05:35

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个进程是有意义的,因为您使用的是API,并且必须具有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 
+0

我用VM CentOS测试了1个程序。 你不明白这个话题。 问题已经解决,它不是与CPU和核心!这个“功能”节点。js') – zoh 2013-04-16 18:35:15

+0

...或联系我skype:z​​oh-killer – zoh 2013-04-16 18:38:50

+0

@zoh我在Red Hat上运行我的代码,它应该和CentOS非常相似。 – Jess 2013-04-16 21:30:44

相关问题