当前位置:首页 > 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实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现验证码

js实现验证码

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

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

jquery.js

jquery.js

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

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…