有点奇怪的问题,想象一下你需要运行10个SYNCRONOUS函数,它们完成后无关紧要,你只想知道完成所有10个函数的时间:I.E。
f1()
f2()
f3()
...
f10()
doStuffWithResult();
现在,如果您使用这样的承诺,假设您已将每个承诺重写为promoises:
Promise.All([f1,f2,f3,f4,f5,f6,f7,f8,f9,f10])
.then(() => {
doStuffWithResult();
})
您会看到性能提升吗?从理论上讲,我想说不,因为这些函数仍然是同步的,并且所有内容仍在一个线程上运行。
谢谢!
答案 0 :(得分:3)
你会看到性能提升吗?
不,你提出的建议不会更快。
Promises不会创建线程。他们所做的只是提供一个合作系统,用于跟踪异步操作何时完成,然后通知感兴趣的各方成功或失败。它们还提供了在嵌套异步操作时传播错误的服务。
而且,您提出的Promise.all()
代码甚至不起作用。您必须将一个promise数组传递给Promise.all()
,而不是函数引用数组。在您的示例中,甚至不会调用您的函数。
并且,如果您将代码更改为实际执行的代码,那么它可能比直接调用同步函数更慢,因为您将执行promise代码并且所有.then()
处理程序都在未来执行勾选(不同步)。
在node.js中,并行执行同步事物的唯一方法是启动子进程(可以并行执行)或将操作传递给可以使用实际操作系统线程的一些本机代码。