SOURCE

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 命令行工具 X clear

                    
>
console