2011-11-06 58 views
7

我的問題很簡單。雖然,它可能需要不同的變量來回答(我猜)我應該在node.js中fork()多少個child_processes?

我在玩node.js,我在考慮如何在多核架構中使用它。

最新版本提供child_process.fork()child.spawn()多進程編程方法。我已閱讀this關於使用Node.js作爲大型Comet服務器的非常好(但過時)的文章。現在,然後nodejs提供了多進程編程,我真的不知道應該爲產生大量請求產生多少進程(假設我的服務器只運行在一臺機器上)。有沒有辦法選擇'最好'(或至少)數量的子進程做同樣的工作?

任何鏈接到首發指南將不勝感激。

謝謝

回答

9

Node.js的官方文檔對如何使用集羣爲例:

var cluster = require('cluster'); 
var http = require('http'); 
var numCPUs = require('os').cpus().length; 

if (cluster.isMaster) { 
    // Fork workers. 
    for (var i = 0; i < numCPUs; i++) { 
    cluster.fork(); 
    } 

    cluster.on('death', function(worker) { 
    console.log('worker ' + worker.pid + ' died'); 
    }); 
} else { 
    // Worker processes have a http server. 
    http.Server(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world\n"); 
    }).listen(8000); 
} 

正如你可以在上面的代碼中看到,你應該使用盡可能多的叉的數量的cpus,以便所有內核在同一時間工作(在處理器內核之間分配工作)。

+1

謝謝:) 沒有看到這一段在文檔的NodeJS :) – ArtoAle

+0

沒問題,你可以在這裏找到:http://nodejs.org/docs/v0.6.0/api/cluster.html – alessioalex

+0

是,我現在正在深入研究官方API。 – ArtoAle

4

在Node.js的例子中,他們希望每個核心只運行一個進程。對每個核心有多少工作人員沒有技術限制,所以只要系統能夠處理,就可以儘可能多地運行。

但是,每個核心運行多個進程並不會提高應用的性能

希望它有幫助!

+0

Will Node是否會在不同的內核上運行每個分支(最多達到最大內核)? –

+0

如果你有2個核心的例子,你將有2個叉子,在每個叉子中,將有1個節點的應用程序。 –