区分 并发 并行 串行

之前很容易搞混 并发和并行,所以记录一哈

并发

两个或多个事件在同一时间,间隔发生。

并行

两个或多个事件在同一时间执行

或者并发是同一实体上的多个事件而并行是不同实体上的多个事件。

来看一个并发的面试题

image

看前试试水
const urls = Array.from({ length: 10 }).map((v, i) => i);
const sleep = url => new Promise(resolve => setTimeout(resolve, Math.random() * 3000 + 1000))

const sendRequest = (urls, limit, callback) => {
    const copyUrls = urls.slice(0)
    let index = 0;
    const requestUrl = () => {
      index += 1;
      console.log('当前并发', index, '- - -  - -  -');
      sleep(copyUrls.shift())
        .then(res => {
          index -= 1;
          console.log('剩余并发', limit - index, '- - -  - -  -');
          if(copyUrls.length) requestUrl();
          else if(index === 0) callback?.();
        })
      if(index < limit) requestUrl();
    }
    requestUrl();
  }

  sendRequest(urls, 4, () => console.log('run callback')));