class Scheduler {
constructor(limit) {
this.limit = limit; // 任务上限
this.queue = []; // 待执行队列
this.number = 0;
}
// 添加任务
addTask(time, output) {
this.queue.push([time, output]);
}
// 开始执行任务
start() {
for (let i = 0; i < this.limit; i++) {
const task = this.queue.shift(); // 队列,先入先出
task && this.dispatchTask(task);
}
}
continueNext() {
const task = this.queue.shift();
task && this.dispatchTask(task);
}
getNumber() {
console.log('正在进行的number:', this.number);
}
dispatchTask(task) {
this.number++;
const [time, output] = task;
setTimeout(() => {
this.number--;
console.log(output);
this.continueNext();
}, time * 1000)
}
}
//支持并发的调度器, 最多允许2两任务进行处理
const scheduler = new Scheduler(2)
scheduler.addTask(1, '1'); // 1s后输出’1'
scheduler.addTask(1, '2'); // 2s后输出’2'
scheduler.addTask(1, '3'); // 2s后输出’3'
scheduler.addTask(1, '4'); // 3s后输出’4'
scheduler.addTask(10, '5'); // 3s后输出’4'
scheduler.addTask(1, '6'); // 3s后输出’4'
scheduler.start();
console