当前位置:首页 > JavaScript

js实现并发量控制

2026-01-31 02:34:23JavaScript

并发量控制的实现方法

在JavaScript中实现并发量控制的核心思路是通过队列管理任务,限制同时执行的任务数量。以下是几种常见方法:

Promise队列与并发控制

利用Promise和队列机制控制并发:

js实现并发量控制

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

  add(task) {
    return new Promise((resolve, reject) => {
      this.queue.push({ task, resolve, reject });
      this.run();
    });
  }

  run() {
    while (this.queue.length > 0 && this.running < this.maxConcurrent) {
      const { task, resolve, reject } = this.queue.shift();
      this.running++;
      Promise.resolve(task())
        .then(resolve)
        .catch(reject)
        .finally(() => {
          this.running--;
          this.run();
        });
    }
  }
}

使用方法:

const controller = new ConcurrencyControl(3);
// 添加任务
controller.add(() => fetch('/api1')).then(console.log);
controller.add(() => fetch('/api2')).then(console.log);

async/await实现

通过async函数和队列管理:

js实现并发量控制

async function parallelLimit(tasks, limit) {
  const results = [];
  const executing = new Set();

  for (const task of tasks) {
    const p = task().then(res => {
      executing.delete(p);
      return res;
    });
    executing.add(p);
    results.push(p);

    if (executing.size >= limit) {
      await Promise.race(executing);
    }
  }
  return Promise.all(results);
}

使用方法:

const tasks = [/* 多个返回Promise的函数 */];
parallelLimit(tasks, 2).then(console.log);

使用第三方库

现有库如p-limit可直接使用:

import pLimit from 'p-limit';

const limit = pLimit(2); // 并发数为2
const tasks = [
  limit(() => fetch('/api1')),
  limit(() => fetch('/api2'))
];
Promise.all(tasks).then(console.log);

注意事项

  • 错误处理需在任务内部或调用处捕获
  • 任务完成后需及时释放并发槽位
  • 浏览器环境需考虑请求取消(AbortController)
  • Node.js环境可结合worker_threads实现真正并行

以上方法可根据实际场景选择,核心思想均为通过队列和Promise状态管理控制并发流程。

标签: js
分享给朋友:

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获取…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…