Promise.all 同时或并行运行 [重复]
Posted
技术标签:
【中文标题】Promise.all 同时或并行运行 [重复]【英文标题】:Promise.all is run concurrently or in parallel [duplicate] 【发布时间】: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
【问题讨论】:
这能回答你的问题吗? Is Node.js native Promise.all processing in parallel or sequentially? "当我运行这个测试时,它会显示并行运行的结果。" - 我看不出您的测试如何区分并发超时和并行超时?跨度> 我认为如果它同时运行它将是6s 不,这是顺序的。 “并发”的字面意思是它们“同时”发生。Promise.all
根本不“运行”承诺。它只是监视一组承诺的完成情况。是的,promise 可以并行运行。这几乎就是异步的全部意义所在。
【参考方案1】:
它不是并行运行的,但我相信你的问题正是这个视频的重点:https://www.youtube.com/watch?v=mvWSD-5G4Yw
【讨论】:
【参考方案2】:仅仅因为它的单线程并不意味着它只能做一件事。
是的,你可以生成,但大多数事情都是这样完成的:
"hey, ur done?"
"nope"
goes ask whatever needs to be done next while waiting
它基本上是一个很大的while true
,它会到处检查东西直到事情完成。
【讨论】:
以上是关于Promise.all 同时或并行运行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章