我正在阅读JS Promises,因为它们通常是
对于异步成功/失败非常有用,因为您对某些内容可用的确切时间不太感兴趣,并且对结果的反应更感兴趣。
我无法记住处理器和#34;管道"的方式。他们的指令执行以获得一定程度的并行性。简而言之
处理器芯片可以并行执行指令。但是,如何采用串行执行的机器指令流并将它们分成有意义的并行流?处理器执行此操作的方式非常聪明且非常复杂,但实际上它们通常会达到有效且可以猜测的地步。在单独的执行管道中操作的结果,并在假设猜测时开始执行。如果后来发现猜测是错误的,则简单地转储基于它的流的结果。没有收获 - 但也没有损失。但是,如果猜测结果很好,那么处理器在单个执行流程中所做的工作就已经完成了两倍 - 因此对于该法术来说,它的运行速度是原来的两倍。
我的问题是 - JS Promises是否实现了相同的概念?
答案 0 :(得分:4)
Promise与处理器并行性无关。 Promise是一种软件概念,它存在于处理器之上的许多层次。在Javascript中,它将是Javascript运行时引擎,它将会或不会利用处理器如何并行运行某些事物,并实现多级以上的承诺,不会以任何方式影响它。
Promises是一种软件架构,用于跟踪异步活动,注册对其完成(或失败)的兴趣,并将这些异步活动与其他活动进行协调。异步活动的使用允许系统具有多个活动"在飞行中"同时(例如下载图像,同时还等待对ajax调用的响应,同时还响应用户事件)。但是,这种使用异步活动的能力并非承诺所独有,与处理器并行性无关。
Promise本身不会将任何任务分解为并行操作。如果您将自己的任务分解为多个异步部分,则promises允许您以结构化方式管理这些异步活动。
答案 1 :(得分:4)
不,这不是并行处理,因为promises可以在单个线程上,并且没有内置任务并行化的概念,它们不会将问题分解为并行子任务等。它们只是一种响应的方法管理异步事件。
我能想到的模仿并行性的最佳模拟将要求用户将问题分解为可并行化的任务,然后将每个调用传递给Promise.All类型函数,该函数将使用webworkers来处理调用。很可能是无用的运动,因为你基本上只是用承诺来装饰网络工作者。在这种情况下,建议你更好地利用像parallel.js这样的库。