美文网首页
解决Node.js循环并发问题

解决Node.js循环并发问题

作者: 浥羽醉悠扬 | 来源:发表于2019-12-23 10:04 被阅读0次

之前用express框架完成个需求,每日定时对数据进行汇总,有了如下代码(示例代码)

const schedule = require("node-schedule");

const summary = async (args) => {
    // 进行汇总
});

schedule.scheduleJob('0 0 3 * * *', async () => {
  // 每天三点调用summary ()
  for (let i = 0; i < num; i ++) {
        await summary(args)
    }
});

这样能完成需求,但是这样只能逐条执行,效率很低,随着需要汇总的数据越来越多,这种写法很快就会变得不可用。于是对定时任务做了如下修改:

schedule.scheduleJob('0 0 3 * * *', async () => {
  const proList = [];
  let ret;
  for (let i = 0; i < num; i ++) {
      ret = summary(args)
      proList.push(ret);
    }
  await Promise.all(proList);
});

按照ES6推荐写法做出如上改动,这样会全部并发,随之带来新的问题:如果程序运行时与数据库建立的连接数,超过设置的最大连接数,超出部分不会执行,同样不符合使用场景。

开发阶段数据库连接数限制设置为2,很快发现了问题,并一度认为这种思路从根源就是错误的,其实不然。

接下来需要做的就是,结合上述代码分多次进行promise.all()。

    const BASE = 50; // 偏移量
    for (let i = 0; i < num; i += BASE) {
        // 对查询结果sqlres进行分割
        let block = sqlres.slice(i, i + BASE);
        await Promise.all(block.map(async (item) => {
            await summary(args);
        }))
    }

从查询结果中每次固定取出BASE个结果,BASE的数值要<连接数据库的限制数。这样就完成了分多次并发,完成效率与负荷的兼顾。

完结撒花。

相关文章

  • 解决Node.js循环并发问题

    之前用express框架完成个需求,每日定时对数据进行汇总,有了如下代码(示例代码) 这样能完成需求,但是这样只能...

  • node.js(七)

    Node.js 事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。No...

  • Node事件循环

    Node.js 事件循环机制 Node.js 采用事件驱动和异步 I/O 的方式,实现了一个单线程、高并发的 Ja...

  • 了解Node.js事件循环阶段及其执行JavaScript代码的

    我相信,如果您正在阅读本文,那么您一定已经听说了Node.js拥有著名的事件循环,它如何处理Node.js中的并发...

  • Thread-Per-Message模式:最简单实用的分工方法

    解决并发编程问题,首要问题也是解决宏观的分工问题。并发编程领域里,解决分工问题也有一系列的设计模式,比较常用的主要...

  • Node.js 中的并发安全问题

    Node.js 中的并发安全问题 简介 Node.js 采用非阻塞异步IO的方式来处理请求。基于 Libuv 的事...

  • 一些基础之一

    高并发 面试的时候都喜欢问这个问题,解决高并发的问题根源在于解决高并发下共享资源的控制问题。也就牵扯到多线程下共享...

  • 如何在 iOS 中解决循环引用的问题

    如何在 iOS 中解决循环引用的问题 如何在 iOS 中解决循环引用的问题

  • GC - 并发的可达性分析

    并发的可达性分析 CMS和G1都有一个并发标记的过程,并发标记要解决什么问题?带来了什么问题?怎么解决这些问题呢?...

  • 死锁问题和并发问题

    如果没有锁就不存在死锁问题。 因此死锁问题是并发问题的衍生问题,因为要解决并发问题,就设计了锁这个解决方案,因为要...

网友评论

      本文标题:解决Node.js循环并发问题

      本文链接:https://www.haomeiwen.com/subject/pptznctx.html