gpt4 book ai didi

javascript - Bluebird JS : Make a function run in parallel

转载 作者:行者123 更新时间:2023-11-30 10:14:13 24 4
gpt4 key购买 nike

我对 Javascript 中的 Promises 比较陌生,但最近爱上了它们的优雅,尤其是在 Bluebird 库中。

这可能是一个新手问题,但我如何才能将正常同步的函数转换为异步运行?例如,如果我想并行计算 Math.random()*RANGE 三十次,我该如何使用 promises(在 Q 或 Bluebird 中)做到这一点?

最佳答案

首先,promises 不会帮助您使代码并行运行。它们是在您的任务完成时运行其他代码或将此任务与其他任务协调的工具。但是让您当前的代码与其他代码并行运行与 promise 无关。

其次,采用同步任务并尝试使其更像异步任务没有什么优势(而且很复杂),除非它运行的时间太长以至于干扰了其他操作的响应能力。计算一组随机数不太可能是一项需要长时间运行的任务。

如果你真的想在浏览器中并行执行,你会去使用 WebWorkers,这是在基于浏览器的 javascript 中创建一个真正独立的执行线程的唯一方法。除了 WebWorkers,浏览器中的 javascript 是单线程的,因此没有并行执行。可以在连续的 setTimeout() 调用中执行小块代码,这会将您的代码执行与浏览器中发生的其他事情交织在一起,并允许其他浏览器任务在运行另一个长时间运行时保持响应任务。

您可以在此处 Best way to iterate over an array without blocking the UI 看到使用 setTimeout() 分块处理大型数组的示例,以允许其他内容在处理 block 之间运行。 Promises 可以添加到类似这样的东西中,作为管理任务完成或管理其与其他任务协调的方法,但 promises 实际上并不能帮助您使其分块工作。

关于javascript - Bluebird JS : Make a function run in parallel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24835556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com