gpt4 book ai didi

Heroku 上的 Node.js 子进程与单个 Dyno

转载 作者:IT老高 更新时间:2023-10-28 23:03:23 32 4
gpt4 key购买 nike

请原谅我的无知,我目前正在学习如何使用来自 PHP 背景的 Node,我真的没有与 Apache 或服务器管理交互。我正在使用 Heroku 托管我的 Node 项目,直接从 Cloud9 IDE 推送。

根据我的阅读,Heroku dyno 是一个单一的 Web 进程,购买额外的 dyno 可以让您处理更多的流量,因为通过增加 dyno 可以增加您可以处理的请求量的大小在任何时候。

我知道 Node 是一个单线程系统,它逐个处理请求,允许您为可能需要一些时间来处理的任何事情(如数据库请求、处理文件等)生成子进程。

那么,如果我使用单个测功机生成一个子进程,Heroku 会发生什么?这不需要另一个测功机来工作吗?当然,如果 Node 正在运行一个进程并且我的单个测功机中只有一个进程可用,那么任何额外的进程也必须由该进程处理吗?

还是我这一切都错了?

最佳答案

您对 exec 的理解大致正确,我担心的是您在不需要时使用它...在您的问题中,您只提到了操作的 I/O 类型,哪个 Node 在其中非常有效地处理它单线程事件模型的处事。尽管是单线程的,但事件模型允许代码在不阻塞主事件循环的情况下运行(除非您正在执行非常 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 中很少有东西表现得像第二个例子。如果您有适合第二个示例的内容,那么您最好选择一种不同的语言,而不是试图强制 Node 为它设计得很差的用例工作。

关于Heroku 上的 Node.js 子进程与单个 Dyno,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17146491/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com