提起控制并发
,大家应该不陌生,我们可以先来看看多并发
,再去聊聊为什么要去控制它
多并发
一般是指多个异步操作同时进行,而运行的环境中资源是有限的,短时间内过多的并发,会对所运行的环境造成很大的压力,比如前端的浏览器,后端的服务器,常见的多并发操作有:
- 前端的多个接口同时请求
- 前端多条数据异步处理
- Nodejs的多个数据操作同时进行
- Nodejs对多个文件同时进行修改
正是因为多并发
会造成压力,所以我们才需要去控制他,降低这个压力~,比如我可以控制最大并发数是 3,这样的话即使有100个并发,我也能保证最多同时并发的最大数量是 3
代码实现
实现思路
大致思路就是,假设现在有 9 个并发,我设置最大并发为 3,那么我将会走下面这些步骤:
- 1、先定好三个坑位
- 2、让前三个并发进去坑位执行
- 3、看哪个坑位并发先执行完,就从剩余的并发中拿一个进去补坑
- 4、一直重复第 3 步,一直到所有并发执行完
Promise.all
在进行多并发的时候,我们通常会使用Promise.all
,但是Promise.all
并不能控制并发,或者说它本来就没这个能力,我们可以看下面的例子
const fetchFn = (delay, index) => { return new Promise(resolve => { console.log(index) setTimeout(() => { resolve(index) }, delay); }) } const promises = [ fetchFn(1000, 1), fetchFn(1000, 2), fetchFn(1000, 3), fetchFn(1000, 4), fetchFn(1000, 5), fetchFn(1000, 6) ] Promise.all(promises)
09-19 10:41