我是nodejs的新手,希望对callstack有一些清晰度。我的应用程序所做的是从SQS读取消息并异步上传到不同的数据源,如dynamo,mysql,stream等..这里的问题是使用mutliple worker我们可以同时并行接收20/30 msgs并且会执行异步调用upload.Since操作上传和接收回调的速度较慢,我怀疑nodejs中的事件队列将填充异步调用而我让所有人在短时间内上传异步电话。所以,我有两个问题
1.事件循环的最大容量是多少,同时在事件循环中可以有多少异步调用。
2.如何控制并发性并获取加载的详细信息并计算下次上传异步调用所需的等待时间。
ps:假设我可以在10分钟内读取80000个消息,我无法进行80000个并行异步上传IO调用并在nodejs事件循环中排队。请帮助我理解这一点。
答案 0 :(得分:0)
就事件循环而言,我不知道正在进行的最大任务数是多少,但您可以做的是,您可以使用Async等模块控制正在进行的任务数量(如果如果您正在使用ES8 async / await,那么您正在使用传统的回调,Q或Bluebird(如果您正在使用承诺)或使用某些承诺库组合。
请参阅:
特别是看看parallelLimit等等:
现在,对于事件循环限制。您可以使用以下代码对其进行测试:
const n = 1000000;
let s = 0;
for (let i = 0; i < n; i++) {
setTimeout(() => {
s++;
if (i >= n - 1) {
console.log(s);
}
});
}
你可以看到在事件循环中拥有数百万的东西不是问题所以事件循环本身不太可能是你的情况下的瓶颈。我会更关心你的开放套接字的操作系统限制或它可以处理的并发请求的服务器限制。
因此我建议使用其中一种方法来限制我上面描述的并发请求数。