javascript - 在 node.js 中使用工作进程/后台进程与异步调用

标签 javascript node.js postgresql heroku

我想知道将数据库或其他异步调用传递给一个或多个工作进程是否有任何好处。具体来说,我正在使用 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 时间(如果确实如此)。这部分代码确实受益于在另一个进程中运行 - 它释放了主进程来接受传入的请求。

有两种方法来构建这样的代码。要么在单独的进程中运行异步函数(这样回调就不会阻塞),要么只在单独的进程中将回调的相关部分作为函数运行。

关于javascript - 在 node.js 中使用工作进程/后台进程与异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32834353/

相关文章:

postgresql - 配置单元:主机没有 pg_hba.conf 条目

postgresql - 跟踪长时间运行函数(从外部)进度的最佳方法 - PostgreSQL 11?

javascript - 根据选项值自动选择

arrays - 异步等待 JSON 解析不等待

node.js - ts-node:意外 token ':'

javascript - 您可以将 FileInterceptor 与 TransformPipe 一起使用吗

javascript - 如何将模糊函数传递并应用到父组件上的特定输入?

javascript - 使用 jinja2 兼容模式预编译 Nunjucks 模板

javascript - 从代码行中删除 href

sql - PostgreSQL 错误 : Subquery has too many columns