【问题标题】:Promise.all is run concurrently or in parallel [duplicate]Promise.all 同时或并行运行 [重复]
【发布时间】: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


【解决方案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,它会到处检查东西直到事情完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2016-10-06
      • 2015-09-30
      相关资源
      最近更新 更多