前端实现如何实现并发

398 阅读1分钟

首先我们来说一下什么叫做并发,并发是指在一定的时间范围内进行着多次执行请求,也就是类似我们的三行到,就可以简单的理解为三个并发,但是这只是从一定的参考上去衡量,单时间片很小很小的时候,也就是小刀只够执行一次任务的时候,实际上并发还是单次执行!他只是在很小的时间范围内去来回切换执行而已!

function request(par){
    return new Promise((resolve)=>setTimeout(resolve(`执行${par}`),1000))
}

async function concurrent(task, max = 3) {
    let pools = []
    for (let i = 0; i < task.length; i++) {
        console.log(task[i])
        pools.push(request(task[i]))

        if (pools.length === max) {
            console.log(pools,i)
            await Promise.race(pools).then(res => {
                console.log(res)
            }).finally(() => {
                pools.pop()
            })
        }
    }
}


concurrent(new Array(10).fill(1).map((item,index)=>index))()

废话少说,直接上代码

整体代码比较简单,当pools中的数据也链接数一样的,开始执行并发任务,执行完一个之后剔除,再加入,再次执行,这样就可以简单的模拟一个并发,当然我们还有最后不满3个任务的时候,没有实现,但是一个简单的并发基本完成,如果感兴趣,自己也可以试试,加深印象!