什么';node.js中这两种实现的区别是什么?

什么';node.js中这两种实现的区别是什么?,node.js,Node.js,我想知道,在性能方面,以下各项之间是否存在差异: 1) 在同一端口中: var http = require('http'); http.Server(function (req, res) { if (req.url == 'foo') { foo(); return;} if (req.url == 'bar') { bar(); } }).listen(123); 2) 在2个端口上拆分 var http = require('http'); http.Server(func

我想知道,在性能方面,以下各项之间是否存在差异:

1) 在同一端口中:

var http = require('http');

http.Server(function (req, res) {
  if (req.url == 'foo') { foo(); return;}
  if (req.url == 'bar') { bar(); }
}).listen(123);
2) 在2个端口上拆分

var http = require('http');

http.Server(function (req, res) {
  foo();
}).listen(123);

http.Server(function (req, res) {
  bar();
}).listen(456);
3) 在2个单独的js文件中,我将在2个不同的节点上启动


foo()
bar()
是需要时间才能解析的函数,例如上载文件。

两个不同的节点实例提供两个CPU线程(但占用更多内存,无法轻松共享状态)。这是我能看到的唯一真正的区别。

#1和#2在性能方面基本相同。如果您运行两台像#3这样的服务器,并且您有一台多核机器,您将能够执行多达两倍的并发请求,这取决于所需和可用的IO。

好吧,如果工作负载是I/O绑定的,那么使用两个CPU将无法提高速度(否则node.js将毫无意义)。当然,如果工作负载是CPU繁重的,那会有很大帮助。是的,这就是为什么我说“取决于所需和可用的IO”: