当前位置: 首页 > 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完成

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

http://www.dtcms.com/a/217074.html

相关文章:

  • 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时不生效问题解决
  • Python+AI Agent:解锁MCP Servers的智能潜力
  • (自用)Java学习-5.16(取消收藏,批量操作,修改密码,用户更新,上传头像)
  • 相机定屏问题分析四:【cameraserver 最大request buffer超标】后置视频模式预览定屏闪退至桌面
  • 自动驾驶规划控制教程——不确定环境下的决策规划
  • 函数到底有多少细节?
  • Docker+MobaXterm+x11实现容器UI界面转发本地
  • rlemasklib 安装笔记
  • algolia使用配置教程-为SSG静态站增加algolia搜索功能
  • 投影机光源三代发展史:从高压汞灯、白光 LED 到三色光源
  • 【Python】日期计算和自动化运行脚本