的最佳數目我有4個核心和運行該代碼根據this example:Node.js的簇 - 工人
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
var id = 0;
if (cluster.isWorker) {
id = cluster.worker.id;
}
var iterations = 1000000000;
console.time('Function #' + id);
for (var i = 0; i < iterations; i++) {
var test = 0;
}
console.timeEnd('Function #' + id);
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
}
具有4叉(上面的代碼),我得到:
功能#0:1698.801ms
功能#1:3282.679ms
功能#4:3290.384ms
功能#3:3425.090ms
功能#2:3424.922ms
具有三叉,我得到:
功能#0:1695.155ms
功能# 2:1822.867ms
功能#3:2444.156ms
功能#1:2606.680ms
設有2叉,我得到:
功能#0:1684.929ms
功能#1:1682.897ms
功能#2 :1686.123ms
我不明白這些結果。是不是1 fork/core最佳 number?在這裏,我看到4叉不比2叉更好。
感謝您的信息。那麼對於Node.js,另一半內核僅用於異步代碼?它是否需要集羣或者它是否意味着Node.js只使用一個執行線程,而另一些**也可以並行使用異步代碼的線程(〜核心?)?另外,由於我正在開發一款遊戲,它主要是受CPU限制的。但是我在github工作中看到了一些'setTimeout(updateClients,0);',因爲「異步更新提高了性能」。他們是對的嗎? – zbeyens
節點本身不安排任何事情,這取決於操作系統(以及CPU本身)。如果你有CPU綁定的代碼,'cluster'可以幫助你,因爲它可以讓你在單獨的進程中運行CPU繁忙的代碼,操作系統可以安排到不同的代碼作爲應用程序的「主要」部分。如果您在同一個進程中將I/O綁定和CPU綁定內核混合在一起,那麼使用'setTimeout()'技巧非常有用。 – robertklep