【发布时间】:2021-09-10 07:31:20
【问题描述】:
据我所知,NodeJS 不会并行运行 Promise,而是并发运行它们,因为它是单线程事件循环架构。通过创建新的子进程以利用多核 CPU 来并行运行事物的能力。但是当我运行这个测试时,它显示了并行运行的结果。请帮我解释一下
const a = new Promise(resolve => setTimeout(() => resolve("a"), 2000))
const b = new Promise(resolve => setTimeout(() => resolve("b"), 2000))
const c = new Promise(resolve => setTimeout(() => resolve("c"), 2000))
const begin = Date.now();
async function test() {
const promises = [a, b, c];
const [output1, output2, output3] = await Promise.all(promises);
return `parallel is done: ${output1} ${output2} ${output3}`;
}
test().then((arr)=>{
console.log(arr);
console.log( "time :", Date.now()- begin);
})
// parallel is done: a b c
//time : 2010
【问题讨论】:
-
"当我运行这个测试时,它会显示并行运行的结果。" - 我看不出您的测试如何区分并发超时和并行超时?跨度>
-
我认为如果它同时运行它将是6s
-
不,这是顺序的。 “并发”的字面意思是它们“同时”发生。
-
Promise.all根本不“运行”承诺。它只是监视一组承诺的完成情况。是的,promise 可以并行运行。这几乎就是异步的全部意义所在。
标签: javascript node.js promise