gpt4 book ai didi

javascript - 可以或应该同时运行的 promise 数量是否有限制?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:09:10 26 4
gpt4 key购买 nike

令人惊讶的是,谷歌无法返回这个问题的结果。

我想知道在排队并等待下一个完成之前可以或应该并行运行多少个 promise 。我想这可能取决于用户的互联网,但我认为这值得一问。

如果它基于用户的 ISP/连接类型,是否有一种方法可以测试在启动队列之前发送的理想 promise 量?

另外,我是从客户端严格来说的。所以,单线程js。

示例代码:

    function uploadToServer(requestData){
return Promise((...));
}

function sendRequests(requestArray){
var count = 0;
for(var requestData in requestArray){
if(count<idealAmount){
uploadToServer(idealAmount).then(count--);
count++;
}else{
// Logic to wait before attempting to fire event
}

}
}

最佳答案

Promise 本身没有特定的编码限制。它们只是一个通知系统,您可以拥有数百万个通知系统(只要您有足够的内存来容纳这些 Javascript 对象)。

现在,如果一个 promise 代表一个底层异步操作(他们通常这样做),那么很可能会有一些限制可以同时运行的特定类型的异步操作的数量。例如,在某些时候,您可能会遇到单个主机同时接受您的请求数量的限制。或者,您可能会在某处遇到数以亿计的连接的本地资源问题。

对于像 node.js 磁盘 I/O 操作这样的事情,底层磁盘 I/O 子系统已经有一个排队系统,所以只有少数操作实际上同时运行,其余的都在排队。

所以,要回答你能有多少个并发操作的问题,只能在特定类型的异步请求,有时甚至是特定类型的接收主机的上下文中分析和回答。

如果您知道您正在处理大量或可能大量的请求,并且您将为该数组中的每个项目发送网络请求,那么通常自己编写一个限制以避免压倒本地资源或目标主机资源。这通常不是通过队列完成的,而是只启动 N 个请求的代码,然后当一个请求完成时,它启动下一个请求,依此类推。 Bluebird 和 Async 库都有为您管理它的方法。在 Bluebird 中,它是 Promise.map()concurrency 选项。我还手动编写了多次管理并发连接数的循环,下面是部分代码的链接:

Promise.all consumes all my RAM

Javascript - how to control how many promises access network in parallel

Make several requests to an API that can only handle 20 request a minute

Loop through an api get request with variable URL

Choose proper async method for batch processing for max requests/sec

Nodejs: Async request with a list of URL

关于javascript - 可以或应该同时运行的 promise 数量是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54093922/

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