import pLimit from 'p-limit' // 建议使用 v2.2.0 以兼容 CJS /** * 并发管理器,负责动态调整并发数 */ export class ConcurrencyManager { private baseConcurrency: number private currentConcurrency: number private limit: ReturnType constructor(baseConcurrency: number = 2) { this.baseConcurrency = baseConcurrency this.currentConcurrency = baseConcurrency this.limit = pLimit(this.currentConcurrency) } /** * 获取当前的并发限制器 */ getLimit() { return this.limit } /** * 增加并发数 */ increaseConcurrency(): void { this.currentConcurrency++ this.limit = pLimit(this.currentConcurrency) } /** * 减少并发数 */ decreaseConcurrency(): void { if (this.currentConcurrency > 1) { this.currentConcurrency-- this.limit = pLimit(this.currentConcurrency) } } /** * 重置并发数为基准值 */ resetConcurrency(): void { this.currentConcurrency = this.baseConcurrency this.limit = pLimit(this.currentConcurrency) } /** * 根据系统资源动态调整并发数 */ adjustConcurrency(): void { // 这里可以添加根据系统资源(如CPU、内存使用率)动态调整并发数的逻辑 // 目前实现一个简单的基于任务类型的调整策略 this.resetConcurrency() } } // 导出一个单例实例 export const concurrencyManager = new ConcurrencyManager()