是否并行处理需要考虑数据库和内存压力吗
发布于 5 年前 作者 Mr-Dolphin 2541 次浏览 来自 问答

比如我有好几个异步任务,每个任务都含有诸多io操作(http请求啊,数据库查询啊之类的)这些io都存在一定的瓶颈,那么我应该每个任务都用await来控制流程一个一个来,还是说用Promise.all并行处理? 现实场景是这样的,我有一个凌晨执行的统计任务,该任务又包含若干个会发起一定数量(几千http请求和几千数据库查询操作)的没有关联的小任务,那么我如果一次把这几个任务压入队列中并行处理的数据库和内存压力和程序里用await一个一个执行的压力是否差别很大。

10 回复

或者说我们需要添加并发限制?

是否 Promise.all 并行处理取决于这些任务是否互斥

io瓶颈和 promise没啥关系吧 io瓶颈看看是不是硬件的问题 promise虽然有性能开销但是应该不大吧

@Ander456 promise只是异步流程的一种控制方法,在这里讨论的是在应用容易遇到内存和数据库瓶颈的情况下是否要谨慎使用并行处理

任务可以并行,但要测试下并发量到多少会对服务器造成负载大,每一次的并发量降低到不影响服务的水平就可以了

要考虑,主要任务的互斥性。不然会有脏数据。 另外,基于性能考虑,建议把任务做成同步。。。。或者队列形式处理。。。。不然,巨量任务一起跑,内存泄漏也是有危险的

@1019045652 测试不要往这里发 @alsotang 建议弄个举报功能

@alwayslyp 你at我就是举报啦。我会封号的

哪边需要被榨干,就去榨干哪边。如果db和nodejs都很闲,就让他们尽可能并行。如果db撑不住了,当然不要硬塞请求过去。

如果就几千个查询,是没有问题的。不放心可以压测确认下

来自酷炫的 CNodeMD

回到顶部