2024-06-08 某大廠面試官:100 個請求同時發(fā)送最铁,咋辦讯赏?

03:維護(hù)線程池
我們可以維護(hù)一個運行池和一個等待隊列垮兑,運行池中始終保持10個請求并發(fā)冷尉。

當(dāng)運行池中一個請求完成后,就從等待隊列中取出一個新請求放入運行池中運行系枪,保證運行池始終滿負(fù)荷運轉(zhuǎn),即使出現(xiàn)慢接口,也不會阻塞后續(xù)接口入池膊夹。

// 運行池,用于存儲當(dāng)前正在執(zhí)行的請求
const pool = new Set();

// 等待隊列放刨,用于存儲等待執(zhí)行的請求
const waitQueue = [];

/**
 * @description: 限制并發(fā)請求的數(shù)量
 * @param {*} reqFn: 請求方法(返回一個 Promise 的函數(shù))
 * @param {*} max: 最大并發(fā)數(shù)
 * @returns {Promise} 返回一個 Promise尸饺,當(dāng)請求完成時 resolve 或 reject
 */
const request = (reqFn, max) => {
  return new Promise((resolve, reject) => {
    // 檢查運行池是否已滿
    const isFull = pool.size >= max;

    // 包裝新的請求方法
    const newReqFn = () => {
      reqFn()
        .then(res => {
          resolve(res); // 請求成功時 resolve
        })
        .catch(err => {
          reject(err); // 請求失敗時 reject
        })
        .finally(() => {
          // 請求完成后,將其從運行池中移除
          pool.delete(newReqFn);
          // 從等待隊列中取出新的請求并放入運行池中執(zhí)行
          const next = waitQueue.shift();
          if (next) {
            pool.add(next);
            next();
          }
        });
    };

    if (isFull) {
      // 如果運行池已滿浪听,將新的請求放入等待隊列
      waitQueue.push(newReqFn);
    } else {
      // 如果運行池未滿,將新的請求加入運行池并執(zhí)行
      pool.add(newReqFn);
      newReqFn();
    }
  });
};

// 遍歷 requestList掉分,并發(fā)執(zhí)行每個請求克伊,限制最大并發(fā)數(shù)為 10
requestList.forEach(async item => {
  const res = await request(item, 10); // 調(diào)用 request 函數(shù),并發(fā)執(zhí)行請求
  console.log(res); // 輸出每個請求的結(jié)果
});

https://mp.weixin.qq.com/s/zFTByheg7WfnTHUkyavT4g

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末愿吹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子消返,更是在濱河造成了極大的恐慌,老刑警劉巖耘拇,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倡勇,居然都是意外死亡嘉涌,警方通過查閱死者的電腦和手機(jī)妻熊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門扔役,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亿胸,你說我怎么就攤上這事〕扌” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵突颊,是天一觀的道長潘悼。 經(jīng)常有香客問我洋丐,道長挥等,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任迁客,我火速辦了婚禮辞槐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榄檬。我一直安慰自己,他們只是感情好鹿榜,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著舱殿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪湾宙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天侠鳄,我揣著相機(jī)與錄音死宣,去河邊找鬼。 笑死十电,一個胖子當(dāng)著我的面吹牛叹螟,可吹牛的內(nèi)容都是我干的台盯。 我是一名探鬼主播畏线,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寝殴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起市咽,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤抵蚊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贞绳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡俱尼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年萎攒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍休。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖揽碘,靈堂內(nèi)的尸體忽然破棺而出园匹,到底是詐尸還是另有隱情雳刺,我是刑警寧澤裸违,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站枪汪,受9級特大地震影響涌穆,放射性物質(zhì)發(fā)生泄漏雀久。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一祝沸、第九天 我趴在偏房一處隱蔽的房頂上張望越庇。 院中可真熱鬧罩锐,春花似錦、人聲如沸屁倔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春悦析,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背强戴。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工骑歹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留预烙,地道東北人道媚。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像谴分,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子牺蹄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容