【问题标题】:Node.js database access does it block main thread?Node.js 数据库访问会阻塞主线程吗?
【发布时间】:2015-08-06 21:58:11
【问题描述】:

我在 node.js 上阅读了很多内容,但我有点困惑 node.js 服务器中的线程阻塞,在这种情况下连接到数据库(heroku postgres)

举个例子:

app.get('/search', function(req, res){
    var id = req.query.q;
    **connect to db find items**
         callback ------> **another db transaction**
                    callback ------> res.json({some:data});

});

我的问题是这是否会阻塞主线程?与 npm 模块交互的所有内容是否都会通过事件循环抛出,因此是非阻塞的?是否有定义什么是线程阻塞和什么不是线程阻塞的一般规则或一组准则?

【问题讨论】:

    标签: javascript node.js multithreading


    【解决方案1】:

    通常,大多数名称不以Sync 结尾并接受回调、返回EventEmitter、返回Promise 等的函数都是异步的。这与如今的“一般规则”差不多。但是,为了绝对确定,您应该查阅模块的文档。

    特别是对于 Postgres(pg 模块),连接、查询等都是异步完成的,不会阻塞主线程。

    【讨论】:

      【解决方案2】:

      除了 mscdex 的回答,任何直接返回您想要的值的函数(不是通过回调/承诺/等)肯定会阻塞线程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-09
        相关资源
        最近更新 更多