Skip to content

字节常考题 并发控制

说白了就是写一个类,其中有两个方法,一个add一个run,run当中取出task,并运行,同时检查一下是否达到并发上限;

js
class superTask {
    max
    tasks
    runningCount
    constructor(max){
        this.max = max;
        this.tasks = [];
        this.runningCount = 0;
    }

    add(task){
        return new Promise((resolve,reject)=>{
            this.tasks.push({
                resolve,reject,task;
            })
        })
        this.run();
    }

    run(){
        while(this.tasks.length>0 && this.runningCount < max){
            const {resolve, reject, task} = this.tasks.shift();
            this.runningCount++;
            Promise.resolve(task).then(resolve,reject).finally(()=>{
                this.runningCount--;
                this.run();
            })
        }
    }
}
js
class superTask {
    max;
    tasks;
    runningCount;
    constructor(max) {
        this.max = max;
        this.tasks = [];
        this.runningCount = 0;
    }

    add(task) {
        return new Promise((resolve, reject) => {
            this.tasks.push({
                resolve,
                reject,
                task,
            });
            this.run(); // 每次都调用一下
        });
    }

    run() {
        while (this.tasks.length > 0 && this.runningCount < this.max) {
            const { resolve, reject, task } = this.tasks.shift();
            this.runningCount++;
            Promise.resolve(task).then(resolve, reject).finally(() => {
                this.runningCount--;
                this.run();
            });
        }
    }
}
本站访客数 人次 本站总访问量