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

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完成

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

相关文章:

  • 8Manage PM、Trello与飞书对比评测:哪款项目管理软件更适合企业使用?
  • DAY07:Vue Router深度解析与多页面博客系统实战
  • 数据库 1.0.2
  • Cmake编译yaml-cpp并在QT中测试成功操作步骤
  • 共现矩阵的SVD降维与低维词向量计算详解
  • 【免费】【无需登录/关注】多点矩阵计算器,计算任何坐标系转换
  • Teigha应用——解析CAD文件(DWG格式)Teigha在CAD C#二次开发中的基本应用
  • 2025-05-27 Python深度学习6——神经网络模型
  • C语言_文件操作
  • Qwen2.5-VL视觉-语言模型做图片理解调研
  • Typescript学习教程,从入门到精通,TypeScript 类型声明文件详解(15)
  • 在h5端实现录音发送功能(兼容内嵌微信小程序) recorder-core
  • 了解一下C#的SortedSet
  • MicroPython 开发ESP32应用教程 之 线程介绍及实例分析
  • LockSupport与Condition解析
  • 数据库大学实验二
  • 53、用例(Use Case)详解
  • Java网络编程性能优化
  • 六大常用查找算法对比分析
  • Mybatis使用update更新值为null时不生效问题解决
  • 长春优惠做网站/百度手机提高关键词排名
  • 做鞋子批发网站/杭州seo搜索引擎优化
  • 联通物联网服务运营平台/seo外链工具下载
  • 重庆物流公司网站建设/免费宣传网站
  • 网站建设需要什么人员/商丘seo
  • 男男互做网站泰国/线上销售怎么做