Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?
那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。
Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?
Node.js看起来很有趣,但我必须错过一些东西- Node.js不是调好只运行在一个进程和线程上吗?
那么如何针对多核cpu和多cpu服务器进行扩展呢?毕竟,单线程服务器的速度越快越好,但对于高负载,我希望使用多个cpu。同样的道理也适用于使应用程序更快——现在的方法似乎是使用多个cpu并并行化任务。
Node.js如何适应这种情况?它的想法是以某种方式分布多个实例还是什么?
当前回答
你可以在多个核上运行你的node.js应用程序,通过使用集群模块和os模块的组合,可以用来检测你有多少cpu。
例如,假设你有一个服务器模块,它在后端运行简单的http服务器,你想在几个cpu上运行它:
/ /依赖性。 Const server = require('./lib/server');//这是我们的定制服务器模块。 Const cluster = require('cluster'); Const OS = require(' OS '); //如果我们在主线程上,启动fork。 if (cluster.isMaster) { // Fork进程。 对于(设I = 0;I < os.cpus().length;我+ +){ cluster.fork (); } }其他{ //如果我们不在主线程上,启动服务器。 server.init (); }
其他回答
我使用Node worker以一种简单的方式从我的主进程运行进程。在我们等待官方方式的时候,似乎工作得很好。
多节点利用您可能拥有的所有核心。 看看http://github.com/kriszyp/multi-node。
对于更简单的需求,您可以在不同的端口号上启动多个节点副本,并在它们前面放置一个负载均衡器。
Node Js支持集群来充分利用你的cpu。如果您不使用集群运行它,那么您可能在浪费硬件功能。
Node.js中的集群允许你创建独立的进程,这些进程可以共享相同的服务器端口。例如,如果我们在端口3000上运行一个HTTP服务器,它就是一个运行在处理器单核上的单线程上的服务器。
下面显示的代码允许您对应用程序进行集群化。此代码是由Node.js表示的正式代码。
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
Object.keys(cluster.workers).forEach(function(id) {
console.log("I am running with ID : " + cluster.workers[id].process.pid);
});
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
//Do further processing.
}
查看这篇文章以获得完整的教程
node的未来版本将允许你fork一个进程并将消息传递给它,Ryan表示他想要找到一些共享文件处理程序的方法,所以它不会是一个直接的Web Worker实现。
目前还没有一个简单的解决方案,但它仍然处于早期阶段,node是我见过的移动最快的开源项目之一,所以期待在不久的将来会有一些很棒的东西。
我搜索了Clusterize一个应用程序所有可用的CPU内核,并在这里找到了我自己。我在哪里找到这个关键字是Pm2命令
pm2的例子
这是我的发现
Clusterize一个应用到所有可用的CPU内核: $ pm2 start -i Max
如果需要安装pm2,请使用这些命令
npm install -g pm2
yan add -g pm2
or
使用这里的链接