我在node.js上读了很多内容,我对node.js服务器中的线程阻塞构成了一点困惑,在这种情况下连接到db(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模块交互的所有内容是否都会通过事件循环抛出,因此不会阻塞?是否有一般规则或一套准则来定义什么是线程阻塞?什么不是线程阻塞?
答案 0 :(得分:0)
通常情况下,大多数名称不会在Sync
中结束并接受回调,返回EventEmitter
,返回Promise
等等的函数都是异步的。这与一般的规则很接近"因为这些天来了。但是,要完全确定,您应该参考模块的文档。
对于Postgres(pg
模块),连接,查询等都是异步完成的,不会阻塞主线程。
答案 1 :(得分:0)
除了mscdex的答案之外,任何直接返回你想要的值的函数(不是通过回调/ promise / etc)肯定会阻塞该线程。