我想知道将数据库或其他异步调用传递给一个或多个工作进程是否有任何好处。具体来说,我正在使用 heroku 和 postgres。我已经阅读了有关 Node.js 的大量内容,以及如何构建服务器,以便事件循环不会被阻塞,并且智能架构不会让传入请求的挂起时间超过 300 毫秒左右。
假设我有以下内容:
app.get('/getsomeresults/:query', function(request, response){
var foo = request.params.query;
pg.connect(process.env.DATABASE_URL, function(err, client, done) {
client.query("SELECT * FROM users WHERE cat=$1", [foo],
function(err, result){
//do some stuff with result.rows that may take 1000ms
response.json({some:data})
});
});
});
由于 postgresql 本质上是异步的,创建一个工作进程来处理初始数据库调用的结果集有什么真正的好处吗?
在另一个进程中运行异步函数不会获得任何好处,因为真正的工作(运行 SQL 查询)已经在另一个进程(postgres)中运行。基本上,异步/面向事件的设计模式是一个轻量级的流程管理器,用于在流程之外运行的事物。
然而,我在你的评论中注意到回调函数中的处理确实占用了大量的CPU时间(如果确实如此的话)。这部分代码确实受益于在另一个进程中运行 - 它释放了主进程来接受传入的请求。
有两种方法可以构建此类代码。在单独的进程中运行异步函数(以便回调不会阻塞),或者仅将回调的相关部分作为函数在单独的进程中运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)