2013-04-08 5 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:

Вот я бегу на VM CentOS: centos http://i.stack.imgur.com/GQiiN.png

Может быть, я не понимаю, что?

+1

Похоже, что вы запустили программу в два раза. –

+0

И как я это сделал? – zoh

+0

Как вы его используете? Из командной строки? Как вы убиваете его между испытаниями? Это поможет получить больше информации, чтобы выяснить, что происходит. –

ответ

1

Вероятно, узел создает системные потоки!

I'am введите консольную

[[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

Hi @zoh. Я не закрыл вопрос, но вы должны знать, что node.js не создает 'threads'. Возможно, вы хотели сказать «процесс». – Jess

0

I создал небольшой сервер узлов, который запускает 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 cluster, и у вас должно быть 2 процессора или 1 процессор с 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 
+0

Я протестировал с VM CentOS, где 1 proc. Вы не знаете об этой теме. Проблема решена, и это не связано с процессором и ядром! Этот «особенный» узел.js ') – zoh

+0

... или связаться со мной skype: zoh-killer – zoh

+0

@zoh Я запустил свой код на Red Hat, который, как предполагается, очень похож на CentOS. – Jess

Смежные вопросы