当前位置:首页 > JavaScript

js 实现一个并发队列

2026-01-31 10:34:45JavaScript

实现并发队列的基本思路

在JavaScript中实现并发队列,通常需要控制同时执行的异步任务数量。可以通过队列管理待执行任务,并结合Promise和计数器实现并发控制。

js 实现一个并发队列

基于Promise的并发队列实现

class ConcurrentQueue {
  constructor(concurrency) {
    this.concurrency = concurrency;
    this.running = 0;
    this.queue = [];
  }

  add(task) {
    this.queue.push(task);
    this.next();
  }

  next() {
    while (this.running < this.concurrency && this.queue.length) {
      const task = this.queue.shift();
      this.running++;

      task().finally(() => {
        this.running--;
        this.next();
      });
    }
  }
}

使用示例

// 创建并发数为2的队列
const queue = new ConcurrentQueue(2);

// 模拟异步任务
function asyncTask(id, delay) {
  return () => new Promise(resolve => {
    console.log(`开始任务 ${id}`);
    setTimeout(() => {
      console.log(`完成任务 ${id}`);
      resolve();
    }, delay);
  });
}

// 添加任务
queue.add(asyncTask(1, 1000));
queue.add(asyncTask(2, 1500));
queue.add(asyncTask(3, 500));
queue.add(asyncTask(4, 2000));

高级功能扩展

对于更复杂的需求,可以扩展以下功能:

js 实现一个并发队列

  • 任务优先级处理
  • 错误重试机制
  • 任务进度跟踪
  • 暂停/恢复功能

使用async库的替代方案

如果不想手动实现,可以使用现成的库如async

const async = require('async');

// 并发控制示例
async.parallelLimit([
  callback => setTimeout(() => callback(null, '任务1'), 1000),
  callback => setTimeout(() => callback(null, '任务2'), 1500),
  callback => setTimeout(() => callback(null, '任务3'), 500)
], 2, (err, results) => {
  console.log(results);
});

注意事项

实现并发队列时需考虑:

  • 内存泄漏风险(长时间运行的应用)
  • 错误处理机制
  • 任务取消功能
  • 性能监控

以上实现提供了基本框架,可根据具体需求进行扩展和优化。

标签: 队列js
分享给朋友:

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…