您对 exec 的理解大致正确,我担心的是您在不需要时使用它...在您的问题中,您只提到了 I/O 类型的操作,哪个节点在其单线程事件中非常有效地处理做事的典范。尽管是单线程的,但事件模型允许代码在不阻塞主事件循环的情况下运行(除非您正在执行非常 CPU 密集型操作......,其中不包括数据库请求和文件处理)话虽如此,您应该不需要启动额外的测功机来做你想做的事。
将测功机视为单处理器计算机。无论您可以在具有单个处理器的机器上做什么,您都可以在您的测功机上执行任何操作,无需额外费用或创建测功机。但是,测功机的内存确实比单核处理器计算机可以利用的内存少得多。因此,您希望生成的任何子进程都不需要另一个 dyno 来运行。您希望运行的每个主进程都需要自己的测功机。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('An amount of data that will take 1 second to send');//This will not block the event loop
}).listen(1337, '127.0.0.1');
var http = require('http');
http.createServer(function (req, res) {
while(true) {
break after 1 second; //this will block the event loop for 1 second
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
考虑上面代码中的两个服务器。两台服务器都有大约一秒钟的工作要做。第一个示例每秒可以处理数千个请求,第二个示例只有 1. 发送数据、数据库请求、服务器请求、文件 IO 等......所有的行为都与第一个示例一样...... Node 中很少有东西表现得像第二个例子。如果你有适合第二个例子的东西,你可能最好选择一种不同的语言,而不是试图强制节点为它设计得很糟糕的用例工作。