2013-04-08 153 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

相關問題