日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

用30行代碼封裝一個工具,解決Promise的多并發(fā)問題

來源: 責編: 時間:2024-06-05 17:46:46 238觀看
導讀背景提起控制并發(fā),大家應(yīng)該不陌生,我們可以先來看看多并發(fā),再去聊聊為什么要去控制它。多并發(fā)一般是指多個異步操作同時進行,而運行的環(huán)境中資源是有限的,短時間內(nèi)過多的并發(fā),會對所運行的環(huán)境造成很大的壓力,比如前端的瀏覽

背景

提起控制并發(fā),大家應(yīng)該不陌生,我們可以先來看看多并發(fā),再去聊聊為什么要去控制它。Wmf28資訊網(wǎng)——每日最新資訊28at.com

多并發(fā)一般是指多個異步操作同時進行,而運行的環(huán)境中資源是有限的,短時間內(nèi)過多的并發(fā),會對所運行的環(huán)境造成很大的壓力,比如前端的瀏覽器,后端的服務(wù)器,常見的多并發(fā)操作有:Wmf28資訊網(wǎng)——每日最新資訊28at.com

  • 前端的多個接口同時請求
  • 前端多條數(shù)據(jù)異步處理
  • Nodejs的多個數(shù)據(jù)操作同時進行
  • Nodejs對多個文件同時進行修改

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

正是因為多并發(fā)會造成壓力,所以我們才需要去控制他,降低這個壓力~,比如我可以控制最大并發(fā)數(shù)是 3,這樣的話即使有100個并發(fā),我也能保證最多同時并發(fā)的最大數(shù)量是 3。Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

代碼實現(xiàn)

實現(xiàn)思路

大致思路就是,假設(shè)現(xiàn)在有 9 個并發(fā),我設(shè)置最大并發(fā)為 3,那么我將會走下面這些步驟:Wmf28資訊網(wǎng)——每日最新資訊28at.com

1、先定好三個坑位Wmf28資訊網(wǎng)——每日最新資訊28at.com

2、讓前三個并發(fā)進去坑位執(zhí)行Wmf28資訊網(wǎng)——每日最新資訊28at.com

3、看哪個坑位并發(fā)先執(zhí)行完,就從剩余的并發(fā)中拿一個進去補坑Wmf28資訊網(wǎng)——每日最新資訊28at.com

4、一直重復第 3 步,一直到所有并發(fā)執(zhí)行完Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

Promise.all

在進行多并發(fā)的時候,我們通常會使用Promise.all,但是Promise.all并不能控制并發(fā),或者說它本來就沒這個能力,我們可以看下面的例子:Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

最后是同時輸出,這說明這幾個并發(fā)是同時發(fā)生的。Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

所以我們需要做一些改造,讓Promise.all執(zhí)行 promises 時支持控制并發(fā),但是我們改造的不應(yīng)該是Promise.all,而是這一個個的fetchFn。Wmf28資訊網(wǎng)——每日最新資訊28at.com

期望效果

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

實現(xiàn) limitFn

我們需要在函數(shù)內(nèi)部維護兩個變量:Wmf28資訊網(wǎng)——每日最新資訊28at.com

  • queue:隊列,用來存每一個改造過的并發(fā)
  • activeCount:用來記錄正在執(zhí)行的并發(fā)數(shù)

并聲明函數(shù) generator ,這個函數(shù)返回一個 Promise,因為 Promise.all 最好是接收一個 Promise 數(shù)組。Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

接下來我們來實現(xiàn) enqueue 這個函數(shù)做兩件事:Wmf28資訊網(wǎng)——每日最新資訊28at.com

  • 將每一個 fetchFn 放進隊列里
  • 將坑位里的 fetchFn 先執(zhí)行

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

假如我設(shè)置最大并發(fā)數(shù)為 2,那么這一段代碼在一開始的時候只會執(zhí)行 2 次,因為一開始只會有 2 次符合 if 判斷,大家可以思考一下為什么!Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

一開始執(zhí)行 2 次,說明這時候兩個坑位已經(jīng)各自有一個 fetchFn 在執(zhí)行了。Wmf28資訊網(wǎng)——每日最新資訊28at.com

接下來我們實現(xiàn) run 函數(shù),這個函數(shù)是用來包裝 fetch 的,他完成幾件事情:Wmf28資訊網(wǎng)——每日最新資訊28at.com

1、將 activeCount++ ,這時候執(zhí)行中的并發(fā)數(shù) +1Wmf28資訊網(wǎng)——每日最新資訊28at.com

2、將 fetchFn 執(zhí)行,并把結(jié)果 resolve 出去,說明這個并發(fā)執(zhí)行完了Wmf28資訊網(wǎng)——每日最新資訊28at.com

3、將 activeCount--,這時候執(zhí)行中的并發(fā)數(shù) -1Wmf28資訊網(wǎng)——每日最新資訊28at.com

4、從 queue 中取一個并發(fā),拿來補坑執(zhí)行Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

其實第 3、4 步,是在 next 函數(shù)里面執(zhí)行的。Wmf28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片Wmf28資訊網(wǎng)——每日最新資訊28at.com

完整代碼

const limitFn = (limit) => {  const queue = [];  let activeCount = 0;  const next = () => {    activeCount--;    if (queue.length > 0) {      queue.shift()();    }  };  const run = async (fn, resolve, ...args) => {    activeCount++;    const result = (async () => fn(...args))();    try {      const res = await result;      resolve(res);    } catch { }    next();  };  const enqueue = (fn, resolve, ...args) => {    queue.push(run.bind(null, fn, resolve, ...args));    if (activeCount < limit && queue.length > 0) {      queue.shift()();    }  };  const generator = (fn, ...args) =>    new Promise((resolve) => {      enqueue(fn, resolve, ...args);    });  return generator;};

這不是我寫的

其實這是一個很出名的庫的源碼,就是p-limit,哈哈,但是重要嗎?知識嘛,讀懂了,它就是你的,到時跟面試官嘮嗑的時候,他哪知道是不是真的是你寫的!Wmf28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-92182-0.html用30行代碼封裝一個工具,解決Promise的多并發(fā)問題

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 短短幾年,為什么 Vite 會變得這么受歡迎?

下一篇: Tailwind Classes 我希望早點知道的

標簽:
  • 熱門焦點
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰(zhàn)略發(fā)布會今天下午如期舉辦,在本次發(fā)布會上,Redmi公布了多項關(guān)于和聯(lián)發(fā)科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 石頭自清潔掃拖機器人G10S評測:多年黑科技集大成之作 懶人終極福音

    科技圈經(jīng)常能看到一個詞叫“縫合怪”,用來形容那些把好多功能或者外觀結(jié)合在一起的產(chǎn)品,通常這樣的詞是貶義詞,但如果真的是產(chǎn)品縫合的好、縫合的實用的話,那它就成了中性詞,今
  • 掘力計劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發(fā)實戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 之家push系統(tǒng)迭代之路

    前言在這個信息爆炸的互聯(lián)網(wǎng)時代,能夠及時準確獲取信息是當今社會要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動拉"獲取信息的方式已不能滿足用
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業(yè)務(wù)走向消亡。騰訊在長音頻領(lǐng)域還在摸索。為
  • 蘋果公司要求三星和LG Display生產(chǎn)「無邊框」OLED iPhone顯示屏

    據(jù) The Elec 報道,蘋果已要求其供應(yīng)商為未來的 iPhone 型號開發(fā)「無邊框」OLED 顯示面板。蘋果顯然已要求三星和 LG Display 開發(fā)新的 OLED 顯示面
  • 蘋果140W USB-C充電器:采用氮化鎵技術(shù)

    據(jù)10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 三翼鳥智能家居亮相電博會,讓用戶體驗更真實

    2021電博會在青島國際會展中心開幕中,三翼鳥直接把“家”搬到了現(xiàn)場,成為了展會的一大看點。這也是三翼鳥繼9月9日發(fā)布了行業(yè)首個一站式定制智慧家平臺后的
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品a久久久久| 蜜臀久久久99精品久久久久久| 亚洲精品影院| 99www免费人成精品| 亚洲图片自拍偷拍| 欧美亚洲一区| 久久一区二区三区av| 欧美美女喷水视频| 国产欧美一区二区三区视频| 在线欧美电影| 亚洲调教视频在线观看| 欧美与欧洲交xxxx免费观看| 欧美成人一区二区三区片免费| 欧美日韩一区二区视频在线| 国产日韩欧美在线| 亚洲三级免费| 午夜精品福利在线观看| 久久综合色一综合色88| 欧美日韩精品免费观看视一区二区 | 欧美日韩伦理在线| 欧美体内she精视频在线观看| 国产精品久久999| 国内激情久久| 亚洲日本欧美天堂| 亚洲专区在线视频| 久久久久99| 欧美日韩亚洲一区二区三区| 国产欧美欧美| 国产欧美精品一区二区三区介绍| 在线国产亚洲欧美| 一卡二卡3卡四卡高清精品视频| 亚洲欧美另类国产| 葵司免费一区二区三区四区五区| 欧美日韩免费精品| 国产亚洲欧美色| 亚洲精品久久久一区二区三区| 亚洲一区二区三区777| 久久久久国产精品厨房| 欧美激情中文不卡| 国产日韩精品电影| 亚洲精品色图| 久久国产精品久久精品国产| 欧美人与禽猛交乱配视频| 国产丝袜美腿一区二区三区| 亚洲人成网站色ww在线| 欧美亚洲免费电影| 欧美激情综合色| 国产综合视频在线观看| 中文精品在线| 你懂的视频欧美| 欧美视频在线免费看| 在线激情影院一区| 一区二区三区|亚洲午夜| 久久女同精品一区二区| 国产精品久久久久久亚洲毛片| 永久555www成人免费| 亚洲综合日韩在线| 欧美激情一区在线| 国产在线观看精品一区二区三区| 一二三区精品福利视频| 蜜桃精品久久久久久久免费影院| 国产精品一区二区久久国产| 亚洲精品在线电影| 久久一区二区精品| 国产日韩精品综合网站| 中文精品视频| 欧美黑人在线播放| 国产综合激情| 亚洲免费观看| 国产精品国产三级国产普通话99| 亚洲精品国偷自产在线99热| 在线视频中文亚洲| 欧美一区二区三区四区在线观看| 女同一区二区| 国产精品v亚洲精品v日韩精品 | 欧美精品二区| 在线看日韩欧美| 欧美伊人影院| 国产精品成人在线观看| 亚洲日本电影| 免费成人网www| 国产精品你懂的在线| 狠狠网亚洲精品| 亚洲一区视频| 欧美美女日韩| …久久精品99久久香蕉国产 | 亚洲一区二区三区色| 快播亚洲色图| 国内成人精品2018免费看| 亚洲国产欧洲综合997久久| 亚洲欧美日韩国产| 欧美另类综合| 亚洲国产日韩欧美在线图片| 久久久亚洲人| 激情丁香综合| 久久精品视频一| 国产一区二区三区在线观看网站| 午夜激情久久久| 国产精品视频最多的网站| 亚洲欧美日本国产有色| 国产精品久久久一本精品| 一区二区不卡在线视频 午夜欧美不卡' | 欧美一区二区久久久| 欧美日韩国产色综合一二三四| 在线观看视频欧美| 久久精品女人天堂| 国产日韩一区二区| 亚洲国产成人在线| 欧美激情一区二区三区成人| 亚洲经典视频在线观看| 欧美激情视频一区二区三区在线播放 | 久久亚洲精品伦理| 亚洲国产精品久久久久秋霞不卡| 女生裸体视频一区二区三区| 亚洲人成网站色ww在线| 欧美日韩国产成人| 亚洲午夜久久久久久久久电影院 | 亚洲欧美成人网| 国产午夜精品理论片a级探花 | 欧美黄色视屏| 一本久久青青| 国产精品久久777777毛茸茸| 亚洲一区二区视频在线观看| 国产精品自在欧美一区| 欧美在线视频导航| 亚洲第一在线综合网站| 欧美激情亚洲视频| 亚洲一级二级在线| 国产日韩av高清| 裸体一区二区| 亚洲最新色图| 国产精品一区二区在线| 久久精品国产v日韩v亚洲 | 亚洲免费一级电影| 国产欧美一区二区精品婷婷| 久久精品国产欧美亚洲人人爽| 亚洲国产精品成人综合| 欧美日韩精品福利| 欧美一区二区三区日韩| 有码中文亚洲精品| 欧美日本韩国| 午夜精品理论片| …久久精品99久久香蕉国产| 欧美视频第二页| 久久久www| av成人激情| 国模私拍一区二区三区| 欧美激情女人20p| 亚洲影院免费观看| 在线观看成人网| 国产精品99免费看 | 亚洲视频在线观看视频| 国模精品一区二区三区| 欧美日本一区二区视频在线观看| 午夜欧美大尺度福利影院在线看| 在线欧美影院| 国产精品久久国产三级国电话系列 | 欧美区一区二区三区| 亚洲一区二区三区四区视频| 国产中文一区| 欧美日韩精品伦理作品在线免费观看| 欧美一区二区视频在线| 亚洲精品欧美日韩专区| 国产三区精品| 欧美精品国产一区二区| 欧美一区二区三区久久精品茉莉花| 亚洲国产va精品久久久不卡综合| 欧美午夜精品一区| 另类尿喷潮videofree| 亚洲男人的天堂在线| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品第一页第二页第三页| 久热精品视频在线免费观看| 亚洲欧美不卡| 亚洲精品国产精品国自产在线 | 亚洲一区二区成人| 亚洲国产成人在线播放| 国产欧美在线看| 欧美日韩一区二区三区在线视频| 久久一区二区三区av| 欧美亚洲三级| 一本色道久久精品| 亚洲第一二三四五区| 国产欧美一区二区精品性| 国产精品成人一区二区三区吃奶| 欧美精品九九99久久| 亚洲性感激情| 欧美日韩免费一区二区三区| 亚洲天堂免费观看| 在线观看日韩专区| 国产精一区二区三区| 欧美片在线播放| 久久一区二区三区国产精品| 午夜精品一区二区三区四区 | 欧美精品色网| 宅男在线国产精品| 黄色在线一区| 国产欧美亚洲精品| 欧美性猛交xxxx乱大交蜜桃| 欧美激情第一页xxx| 乱人伦精品视频在线观看| 久久精品综合| 久久久综合网站| 久久久一区二区|