首页 > 其他分享 >异步控制并发数

异步控制并发数

时间:2023-03-15 09:48:18浏览次数:34  
标签:count taskList start 并发 任务 limit 异步控制

使用昨天练过的Promise来封装一个函数,调用这个函数可以控制并发任务数量,避免过多任务同时执行,多余的任务放在等待队列里,等执行线程空出来后会取出等待队列里的任务执行;

function limitTask(taskList = [], limit = n) {

  return new Promise((resolve, reject) => {

    const len = taskList.length

    let count = 0

    // 同时启动limit个任务

    while(limit > 0) {

      start ()

      limit -=1

    }

    function start() {

      // 从数组中拿取第一个任务

      const task = taskList.shift()

      if(task) {
      
        console.log("执行成功");
        
        if(count == len -1) {

            // 最后一个任务完成

            resolve()

          }else {

            // 完成之后,启动下一个任务

            count++

            start()

          }
      }

    }

  })

 }

//测试

limitTask(['task1', 'task2', 'task3', 'task4', 'task5'],3)

标签:count,taskList,start,并发,任务,limit,异步控制
From: https://www.cnblogs.com/rain111/p/17217336.html

相关文章

  • C# 并发编程学习笔记
    术语含义并发:同时做多件事情;多线程:并发的一种形式,它采用多个线程来执行程序;并行处理:把正在执行的大量任务分割成小块,分配给多个同时运行的线程;异步编程:并发的一种形式,......
  • <<高并发系统实战课>> 小记随笔 —— 用户中心案例优化
    案例介绍用户中心的主要功能是维护用户信息、用户权限和登录状态,它保存的数据大部分都属于读多写少的数据。常见的优化方式主要是将用户中心和业务彻底拆开,不再与业务耦......
  • WebGIS|阿里云服务器配置Geoserver并发布服务
    前期准备购买阿里云的ECS服务器,创建实例,进入实例概述,查看这个实例的基本情况,这里我的实例的操作系统为系统为Ubuntu20.04。内存为4G,这里要注意的是公网IP,这时之后我们访......
  • 高并发环境下生成序列编码重复问题分析
    一、背景有个业务系统(订单系统),通过后台日志和监控观察,系统偶尔会出现重复唯一索引问题,例如:后台日志片段 Duplicateentry'service_no' forkey'idx_service_no'.........
  • 服务器带宽承载多少人同时访问计算方法-浏览器中查看当前网页所有资源数据大小-客服系
    浏览器中怎么查看当前网页所有资源的数据大小在开发者工具的“网络”选项卡中,可以看到所有请求和响应的详细信息,包括每个资源的大小。如果需要查看网页所有资源的总大小,可......
  • 并发编程-信号量
    importrandomimporttimefromthreadingimportThread,Semaphoresm=Semaphore(5)'''semaphore信号量可以通过内置计数器来控制同时运行线程的数量每当调用......
  • Python 并发
    1、并发与并行并行:多个程序同时运行并发:伪并行,看起来是同时并行,其实质是利用了多道技术无论是并行还是并发,在用户眼里看起来都是同时运行的,不管是线程还是进程,都是只是......
  • Java并发基础知识
    进程与线程进程,程序的一次执行过程,系统运行程序的基本单位。启动main函数,即启动JVM的一个进程,mian函数为其主线程。同类多个线程共享进程的堆和方法区资源,切换工作负担......
  • Java基础之并发——CAS操作
    CAS操作的内存地址V,旧的预期值A,即将要更新的目标值B的获取顺序是:首先,读取内存地址V的值;然后,读取旧的预期值A的值;最后,读取即将要更新的目标值B的值。CAS操作是原子性的,因......
  • 并发编程-进程
    进程线程线程和进程的区别进程间通讯管道消息队列信号量共享内存套接字消息队列和管道的区别没有行动,懒惰就会生根发芽。没有梦想,堕落就......