新闻中心

J*aScript并发控制_Promise调度策略

2025-11-18
浏览次数:
返回列表
答案:并发控制是限制同时执行的异步任务数量,通过任务队列和运行计数实现。例如最多2个并发,后续任务需等待空位释放;Scheduler类维护queue和running状态,任务以函数形式传入避免提前执行,完成时触发下一个任务,确保系统稳定。

javascript并发控制_promise调度策略

在处理大量异步任务时,直接并发执行所有 Promise 可能导致资源耗尽或接口限流。为此,需要一个Promise 调度器来控制并发数量,确保系统稳定运行。这类问题常见于批量请求、文件上传、爬虫抓取等场景。

什么是并发控制?

并发控制指的是限制同时执行的异步任务数量。例如,有 10 个请求,但最多只允许 3 个同时进行,其余任务排队等待空位释放。

J*aScript 是单线程语言,异步任务通过事件循环调度,而我们可以通过手动管理任务队列实现并发控制。

实现一个简单的调度器 Scheduler

目标:实现一个 Scheduler 类,支持添加异步任务,并限制最大并发数。

示例需求:
  • 最多同时运行 2 个任务
  • add(Promise) 方法用于添加任务
  • 自动按顺序执行,空位释放后继续执行后续任务

代码实现:

class Scheduler {
  constructor(maxConcurrent = 2) {
    this.maxConcurrent = maxConcurrent;
    this.running = 0;
    this.queue = [];
  }

  add(promiseGenerator) {
    return new Promise((resolve, reject) => {
      const runTask = () => {
        if (this.running < this.maxConcurrent && this.queue.length > 0) {
          this.running++;
          const { promise, resolve: res, reject: rej } = this.queue.shift();
          promise()
            .then(res)
            .catch(rej)
            .finally(() => {
              this.running--;
              runTask(); // 触发下一个
            });
        }
      };

      this.queue.push({
        promise: promiseGenerator,
        resolve,
        reject
      });

      // 尝试启动任务
      if (this.running < this.maxConcurrent) {
        runTask();
      }
    });
  }
}

使用方式:

ChatCut ChatCut

AI视频剪辑工具

ChatCut 1086 查看详情 ChatCut
const scheduler = new Scheduler(2);

const timeout = (time) =>
  () => new Promise(resolve => setTimeout(() => resolve(time), time));

scheduler.add(timeout(1000)).then(console.log); // 1s 后输出 1000
scheduler.add(timeout(500)).then(console.log);  // 500ms 后输出 500
scheduler.add(timeout(300)).then(console.log);  // 第三个要等前面有空位
scheduler.add(timeout(400)).then(console.log);

输出顺序:
500(第2个完成)
1000(第1个完成)
300(第3个开始并完成)
400(第4个开始并完成)

核心逻辑说明

调度器的关键在于:

  • 维护一个任务队列 queue,存放未执行的任务
  • 记录当前正在运行的任务数 running
  • 每个任务完成后触发 runTask 尝试拉取新任务
  • 任务以函数形式传入(返回 Promise),避免提前触发

注意:必须传入“返回 Promise 的函数”,否则任务在调用 add 时就已经开始执行,失去控制意义。

扩展思路

实际应用中可以进一步优化:

  • 支持优先级队列,高优任务插队
  • 提供取消任务的能力
  • 暴露当前状态(running / waiting)供监控
  • 结合 AbortController 实现超时中断

基本上就这些。一个轻量的调度器不需要复杂设计,关键是理解“任务入队 + 执行反馈触发下一轮”的闭环机制。

以上就是J*aScript并发控制_Promise调度策略的详细内容,更多请关注其它相关文章!


# 不需要  # 临沂信息网络营销推广方法  # 网络seo有哪些  # 安徽网站优化推荐  # 温江营销网站建设  # 要搜索关键词排名怎么弄  # 网站搭建优化推广  # 咸阳网站建设工作  # 云龙区seo优化推广  # 上海图文营销推广企业  # 湛江网站建设产品展示会  # 可以通过  # 相关文章  # javascript  # 闭环  # 它很  # 如何使用  # 管理器  # 有何  # 有什么  # 最多  # 异步任务  # 爬虫  # ai  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 使用Pandas转换并合并DataFrame:多列映射至统一结构  深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射  深入理解J*a编译器的兼容性选项:从-source到--release  HTML元素状态管理:根据DIV内容动态启用/禁用按钮  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  漫蛙Manwa2官网入口地址分享 漫蛙漫画PC版永久访问通道  Bing引擎入口最新2025 Bing搜索免费官方登录  QQ邮箱官方网页版登录 QQ邮箱个人邮箱快速访问  新三国志曹操传110级星符试炼夏侯渊极难攻略  php源码怎么在电脑上测试_电脑测试php源码方法步骤【教程】  J*aScript动态修改指定div内所有a标签样式指南  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  双系统安装时,如何设置默认启动系统? msconfig命令了解一下!  qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程  批改网学生版PC登录 批改网官网登录系统入口  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项  C#中解析不规范的HTML为XML 常见的坑与解决办法  铃兰之剑为这和平的世界希里技能组及加点推荐  Yandex搜索引擎官方地址 俄罗斯网络世界的主要入口  html5 app怎么运行环境_配html5 app运行环境【教程】  AO3访问入口汇总 AO3网页版同人作品一键直达  整合Supabase认证与Django模型:跨模式迁移的解决方案  如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单  ExcelARRAYTOTEXT函数怎么自定义分隔符输出数组文本_ARRAYTOTEXT实现动态生成SQL语句  一加Ace 6T支持全新明眸护眼:通过了最严苛的护眼小金标认证  微信网页版登录教程_微信网页版登录入口在哪  J*a应用集成GitHub CLI与API认证指南  手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析  学习通网页版官方登录 超星学习通电脑端入口指南  Python Socket多播通信中指定源IP地址的实践指南  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  C++如何实现一个装饰器模式_C++设计模式之动态地给对象添加额外职责  J*a递归快速排序中静态变量的状态管理与陷阱  2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC  如何使用Node.js csv 包按条件移除含空字段的CSV记录  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  解决Flask中Quill编辑器内容提交失败及TypeError的指南  荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】  J*aScript DOM操作:高效清空列表元素的策略与实践  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  必由学官网快捷入口 必由学网页版在线学习平台  Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  QQ邮箱登录首页官网地址2026 QQ邮箱官方网页入口  Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025  QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口  斑马英语APP如何开启夜间护眼阅读_斑马英语APP夜间模式与低蓝光设置教程  Linux如何构建多环境配置管理_Linux多环境配置方案  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址 

搜索