我试图了解async
包与代码并行化相关的行为。据我了解,结构化代码以避免回调地狱/汤是有帮助的,但这是唯一的优势吗?
async.parallel([
function(next) {
apiCallTo3rdParty(next);
},
function(next) {
apiCallTo3rdParty(next);
},
function(next) {
apiCallTo3rdParty(next);
}
], function(err, res) {
// do something else with returned data
});
在上面的代码中,所有三个 api 调用都将在不等待另一个完成的情况下进行。根据规格。最后的回调将在最长的 API 调用返回后被调用,因为其余的会在之前完成。
但是,如果我更改代码以使其进行几个阻塞操作,会发生什么?:
async.parallel([
function(next) {
sleep(5);
},
function(next) {
sleep(5);
},
function(next) {
sleep(5);
}
], function(err, res) {
// do something else with returned data
});
从表面上看“Node.js 是单线程的” ,我们认为该async
块将在 15 秒后执行其最终回调,但是知道“Node.js 维护自己的内部线程池”,我们可以假设Node 会在自己的线程中运行每个回调,真正并行化函数,并在 5 秒后调用最终回调?