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

2024-01-12

我想知道将数据库或其他异步调用传递给一个或多个工作进程是否有任何好处。具体来说,我正在使用 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(使用前将#替换为@)

在 Node.js 中使用工作进程/后台进程与异步调用 的相关文章

随机推荐

  • 如何删除单击 uib-accordion-heading 时出现的蓝色边框?

    我已尝试以下问题中提出的解决方案但无济于事 从 Chrome 中的 css 自定义样式按钮中删除蓝色边框 https stackoverflow com questions 20340138 remove blue border from
  • 使用 rsync+ssh+公钥作为与 ssh 密钥所有者不同的用户同步本地和远程目录

    目标是通过 ssh 同步本地和远程文件夹 我当前的用户是user1 并且我通过 ssh 对服务器进行了无密码访问设置server1 我想将本地文件夹与上的文件夹同步server1借助于rsync公用事业 通常我会运行 rsync rtvz
  • MergeLatest 的默认值

    官方文档 https doc akka io docs akka current stream operators Source or Flow mergeLatest html of MergeLatest状态 MergeLatest 为
  • QueryPerformanceCounter 和溢出

    我正在使用 QueryPerformanceCounter 在我的应用程序中进行一些计时 然而 运行几天后 该应用程序似乎停止正常运行 如果我只是重新启动应用程序 它就会再次开始工作 这让我相信我的计时代码存在溢出问题 Author Rya
  • 将 CopyPlugin 添加到 next.config.js

    我想将以下内容添加到我的 webpack 配置中 module exports otherConfig plugins new CopyPlugin from node modules pdftron webviewer public to
  • 将字符串转换为数组 - PostgreSQL

    我在表中有一列存储用逗号分隔的名称 例如 Mel s Hou Rest Mel s Lad Rest 我需要的是将这个字符串转换为以逗号分隔的数组 我需要的查询是 SELECT home location subs state FROM c
  • 如果有焦点组件,则不会执行场景的 JavaFX 按键事件

    我有一段代码可以在按下某个键时执行某些功能 scene setOnKeyPressed event gt if event getCode KeyCode F1 doSomething 它可以工作 但前提是没有焦点组件 例如按钮或文本字段
  • RxJava doOnError 与 onError

    我尝试使用以下代码 initLocalSettingsIfNeed andThen initGlobalSettingsIfNeed configuration doOnComplete callback onSuccess doOnErr
  • Android应用程序图标随运行时变化

    在我的应用程序中 我想显示应用程序的不同图标 应根据场景进行更改 例如 它将标记任务完成的剩余天数 在 Android 菜单上 此图标将显示剩余天数 如果有人对此有任何想法 我将不胜感激 谢谢 实际上有很多方法可以实现这一目标 如果你最近注
  • 来自 SVN 存储库的 Maven 依赖项

    使用maven 2 有没有办法列出对另一个maven项目的依赖关系 该项目位于不同的SVN服务器上但不在maven存储库上 理想情况下 应该可以编译和运行主项目 而无需手动签出和构建依赖项 使用maven 2 有没有办法列出对另一个mave
  • 从存储过程批量复制

    我的数据库中有表 A B 和 C 我必须将A和B得到的结果放入表C中 目前 我有一个 SP 它将 A 和 B 的结果返回到 C 应用程序 该结果将使用 System Data SqlClient SqlBulkCopy 复制到表 C 中 优
  • 如何创建在 Visual Studio 中使用的新语言

    我想编写一种新的模板语言 并且希望 Visual Studio 支持 它 我需要知道的是 我如何解析我的新语言 给定我的新模板语言中的一些代码 如何将其转换为 HTML 现在我正在使用正则表达式逐个标记地解析它 但我认为随着语言变得更加复杂
  • 哈希表的查找时间总是 O(n) ?

    我不明白如果存储桶的数量恒定 那么哈希表如何进行恒定时间查找 假设我们有 100 个桶和 1 000 000 个元素 这显然是 O n 查找 这就是理解非常大的 n 值时事物的行为方式的复杂性所在 因此 哈希表永远不是常量查找 它始终是 O
  • 谷歌地图不显示

    我的 Google 地图无法显示 FF 和 Chrome 中的问题似乎是相同的 但 IE 中的问题更 糟糕 始终是最新版本 在 FF 和 Chrome 中我有一个问题position relative CSS 元素样式 一旦我切换到 使用开
  • TDD 时提取类。如何测试新提取的类?

    因此 我的主类中有几个方法使用矩阵来打开或关闭像素 我已经运行了所有当前的测试 所以我决定现在是时候提取一些与矩阵等相关的逻辑并创建一个 Matrix 类了 我的问题是 除了我目前对 SUT 类进行的测试 我才刚刚开始 所以我目前只有一个类
  • ffmpeg 复制以保留时间戳

    我正在尝试修改 HLS 段传输流 并使用 ffmpeg 保留其开始时间 但是 即使提到了 copyts 输出也不会保留输入文件的 start time 值 这是我的命令行 ffmpeg i fileSequence1 ts i x png
  • 如何将值与反斜杠进行比较?

    if message value 0 or message value 0 do stuff 我确信这是一个简单的语法错误 但是这个 if 语句有问题 当你只需要检查是否相等时 你也可以简单地使用in http docs python or
  • 从可观察数组中获取一个对象

    你如何编写一个需要一个函数Observable
  • vscode 括号对随 v1.67 改变颜色

    我正在尝试 Swagger for Go 但不知何故 在 Visual Studio Code 中它改变了颜色 在我安装 Swagger 之前 大括号和括号不是粉色 黄色或蓝色的 我已经尝试卸载 Swagger 和 Vscode 但这没有帮
  • 在 Node.js 中使用工作进程/后台进程与异步调用

    我想知道将数据库或其他异步调用传递给一个或多个工作进程是否有任何好处 具体来说 我正在使用 heroku 和 postgres 我已经阅读了有关 Node js 的大量内容 以及如何构建服务器 以便事件循环不会被阻塞 并且智能架构不会让传入