当前位置: 首页 > ops >正文

js 实现多并发任务处理

class SuperTask {constructor(number) {// 最大并发数量this.max = number;// 总任务队列this.list = [];// 正在执行的任务数量this.runningCount = 0;}add(fn) {return new Promise((resolve) => {this.list.push({ fn, resolve });this.run();});}run() {// 用if如果任务都能成功添加也可以达到相同的效果,但是如果任务添加失败,就会导致该位置一直空缺// 用if假设任务加完后,再扩充或缩小并发数量也是达不到效果的while(this.runningCount < this.max && this.list.length > 0) {const { fn, resolve } = this.list.shift();this.runningCount++;fn().then(() => {resolve();this.runningCount--;// 一个任务执行完接着执行this.run();});}}
}const timeout = async (time) => {return new Promise((resolve) => {setTimeout(() => {resolve();}, time);})
};const supertask = new SuperTask(2);
const addTask = (time, name) => {const label = `任务${name}`;console.time(label);supertask.add(() => timeout(time)).then(() => {console.timeEnd(label);});
};addTask(10000, 1); // 10s 后输出: 任务1完成;
addTask(5000, 2); // 5s 后输出: 任务2完成
addTask(3000, 3); // 8s 后输出: 任务3完成
addTask(4000, 4); // 12s 后输出:任务4完成
addTask(5000, 5); // 15s 后输出:任务5完成

输出结果:
在这里插入图片描述

http://www.xdnf.cn/news/9187.html

相关文章:

  • AI时代的弯道超车之第二十一章:AI会颠覆哪些行业?
  • 什么是MCP技术,跟http技术有什么区别
  • Excel 统计某个字符串在指定区域出现的次数
  • 低空经济管理系统设计方案
  • Spring Boot 3.4.6 中文文档上线
  • 深入理解 JDK、JRE 和 JVM 的区别
  • CellularPro 1.8.6.1 | 提升网络速度,抢到更多基站的速度
  • Netty创新架构突破链接数瓶颈技术,如何应用于新能源汽车智慧充电桩?
  • Redis 容器启动失败Fatal error loading the DB, check server logs. Exiting.的解决方法
  • 使用 ssld 提取CMS 签名并重签名
  • 在PyTorch中,有了y = x + y,为什么还需要y += x,有什么好处呢?
  • 九级融智台阶的要素协同跃迁框架
  • 6个月Python学习计划 Day 6 - 综合实战:学生信息管理系统
  • ai写歌平台:AnKo开启音乐创作的智能时代!
  • java类加载器
  • 树莓派超全系列教程文档--(50)如何查找树莓派的IP地址
  • 计算机组成与体系结构:硬盘驱动器(Hard Disk Drives)
  • OpenGL Chan视频学习-9 Index Buffers inOpenGL
  • STM32F407VET6学习笔记6:定时器TIM2的配置使用
  • MPLS实验复现
  • 70页精品PPT | 休闲食品行业数据分析平台建设方案快消BI大数据解决方案BI方案
  • [ Qt ] | 常用控件(三):
  • AR眼镜+AI视频盒子+视频监控联网平台:消防救援的智能革命
  • 板凳-------Mysql cookbook学习 (七)
  • 钠离子电池循环寿命突破万次
  • [网页五子棋][用户模块]客户端开发(登录功能和注册功能)
  • 【C语言】排序方法
  • web常见的攻击方式(下)
  • nvm和node的环境配置与下载
  • Windows Telnet 正在连接xxx...无法打开到主机的连接。 在端口 xxx: 连接失败