什么是并发?

  • 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行
  • 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发
  • 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行
  • 并发的关键就是需要能同时处理多个任务的能力,这个不一定是同时进行的。并行则关键是要能同时处理多个任务二者的关键区别在于是否具备同时性。

前端并发数量

关于并发前端能做的就是控制请求数量,控制请求的频率,控制请求的耗时(个人见解)

实现

export async function conCurrent(urls, max = 2) {
const urlList = urls.flat(); //扁平化数组
if (urlList.length === 0) return new Promise.resolve([]);
return new Promise((resolve) => {
const result = []; //存放结果数组
let index = 0; //指向下一个url
let count = 0; //当前完成上传数
const run = async () => {
const url = urlList[index];
const j = index;
try {
result[j] = await axios(url);
index++;
} catch (err) {
result[j] = err;
} finally {
count++;
if (count === urlList.length) resolve(result);
if (index < urlList.length) await run();
}
};
for (let i = 0; i < Math.min(urlList.length, max); i++) {
run();
}
});
}
const axios = (date) => {
return new Promise((resolve) => {
setTimeout(() => {
resolve(date);
}, 1000);
});
};