2013-04-08 3 views
0

est un exemple simple de la doc officielle:Pourquoi node.js exécute deux processus? Ce

$ 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); 
} 

Voici ce que je vois dans htop: htop

Il y a 2 processus de maître et deux processus fourchues.

Pourquoi? Je pensais que je devrais avoir seulement 2 processus!


MISE À JOUR:

Ici, je suis en cours d'exécution sur VM CentOS: centos http://i.stack.imgur.com/GQiiN.png

Peut-être que je ne comprends pas?

+1

On dirait que vous avez exécuté deux fois le programme. –

+0

Et comment je l'ai fait? – zoh

+0

Comment l'utilisez-vous? De la ligne de commande? Comment le tuez-vous entre les tests? Il va falloir plus d'informations pour comprendre ce qui se passe. –

Répondre

1

Probablement, noeud créer des threads du système!

I'am entrer console

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

mais faisant htop ~ 6 processus 0_o (processus et threads sous), mais la mémoire est pleine ...

merci pour Carma;)

+0

Salut @zoh. Je n'ai pas fermé la question, mais vous devez savoir que node.js ne crée pas de "threads". Peut-être que vous vouliez dire "processus". – Jess

0

I créé un petit serveur de noeud qui exécute un exec. L'exec engendrera un nouveau processus (pas un nouveau thread, le node n'utilise pas de threads). Voici le processus:

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 

Je regardais dans github, mais à mon avis sommaire, je ne vois pas que http.createServer fourches ou fraie un nouveau processus. Avoir 2 processus est logique car vous utilisez l'API cluster et vous devez avoir 2 CPU ou 1 CPU avec 2 cœurs.


j'ai couru votre code ci-dessus, et comme j'ai 4 cœurs, je reçois 4 processus:

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

Je suis testé avec VM CentOS où 1 proc. Vous ne comprenez pas ce sujet. Le problème a été résolu et ce n'est pas avec le processeur et le noyau! Ce noeud "caractéristique".js ') – zoh

+0

... ou de contacter pour moi skype: zoh-killer – zoh

+0

@zoh J'ai couru mon code sur Red Hat qui est censé être très similaire à CentOS. – Jess

Questions connexes