当前位置: 首页 > news >正文

福州网站建设多少钱wordpress转发插件

福州网站建设多少钱,wordpress转发插件,欧美网站建设风格特点,wordpress付费查看内容本文节选自我的博客#xff1a;前端如何并发控制 #x1f496; 作者简介#xff1a;大家好#xff0c;我是MilesChen#xff0c;偏前端的全栈开发者。#x1f4dd; CSDN主页#xff1a;爱吃糖的猫#x1f525;#x1f4e3; 我的博客#xff1a;爱吃糖的猫#x1f4d… 本文节选自我的博客前端如何并发控制 作者简介大家好我是MilesChen偏前端的全栈开发者。 CSDN主页爱吃糖的猫 我的博客爱吃糖的猫 Github主页: MilesChen 支持我点赞收藏⭐️留言介绍The mixture of WEBDeepLearningIotanything 前言 众所周知Promise处理异步任务能避免他们阻塞程序执行。当一次并发大量异步任务会导致内存消耗过大、程序阻塞等问题。本文带大家实现异步任务控制器限制并发异步任务数量来解决高并发问题。 假设一个场景有20个异步任务每次只能处理三个异步任务要求尽可能快速的拿到处理结果。 下面带来分段Promise.all和异步任务控制器两种实现方案。 Promise.all 暴力Promise.all 最简单的方式就是Promise.all一次并发20个任务没有使用异步任务控制简单、粗暴。 // 模拟请求 随机产生100-500ms延时 function randomRequest(url){return new Promise((resolve){let delay Math.floor(Math.random()*400100)setTimeout((){resolve({state:success,data:{url}})},delay)}) } async function main(){const queue [];for (let i 1; i 20; i) {queue.push(randomRequest(https://xxx.xx/api/${i}));}let a await Promise.all(queue)console.log(a); } mian()分段Promise.all 这种分段的方式有两个显著的缺陷 阻塞问题因为程序每次都要等异步任务全执行完才进行下个异步任务其中一个异步任务发生阻塞则会导致整体阻塞。无法处理reject 一旦有一个 Promise 被拒绝就立即返回拒绝的 Promise并不会等待其他 Promise 的解析结果 // 模拟请求 随机产生100-500ms延时 function randomRequest(url){return new Promise((resolve){let delay Math.floor(Math.random()*400100)setTimeout((){resolve({state:success,data:{url}})},delay)}) } async function main(maxNum){const queue [];for (let i 1; i 20; i) {queue.push(randomRequest(https://xxx.xx/api/${i}));}for(let i0;iMath.ceil(queue.length/maxNum);i){let a await Promise.all(queue.slice(i*maxNum,i*maxNummaxNum))console.log(a);} } main(3)异步任务控制器 开始就并发3个数量的一次任务当一个异步任务处理完成接龙下个异步任务就像3条流水线并行。解决了Promise.all带来的阻塞问题和无法处理reject问题。 实现需要注意 urls的长度为0时results就没有值此时应该返回空数组maxNum大于urls的长度时应该取的是urls的长度否则则是取maxNum需要定义一个count计数器来判断是否已全部请求完成因为没有考虑请求是否请求成功所以请求成功或报错都应把结果保存在results集合中results中的顺序需和urls中的保持一致 // 模拟请求 0.5概率成功随机产生100-500ms延时 function randomRequest(url){return new Promise((resolve,reject){let delay Math.floor(Math.random()*400100)setTimeout((){let rand Math.random()if(rand0.5) resolve({state:success,data:{url}})else reject({state:error}) },delay)})}// 并发控制函数 const controlAsync (urls, maxNum) {return new Promise((resolve) {if (urls.length 0) {resolve([]);return;}const results [];let index 0; // 下一个请求的下标let count 0; // 当前请求完成的数量// 发送请求async function request() {if (index urls.length) return;const i index; // 保存序号使result和urls相对应const url urls[index];index;console.log(url);try {const resp await randomRequest(url);// resp 加入到resultsresults[i] resp;} catch (err) {// err 加入到resultsresults[i] err;} finally {count;// 判断是否所有的请求都已完成if (count urls.length) {console.log(完成了);resolve(results);}request();}}// maxNum和urls.length取最小进行调用const times Math.min(maxNum, urls.length);for(let i 0; i times; i) {request();}}) }const urls []; for (let i 1; i 20; i) {urls.push(https://xxx.xx/api/${i}); } controlAsync(urls, 3).then(res {console.log(res); })总结 异步任务控制器比Promise.all实现复杂一些但能解决阻塞问题和reject问题 在工作中可以将异步任务控制器封装成通用的工具函数实现多种异步任务的并发控制。 感谢小伙伴们的耐心观看本文为笔者个人学习记录如有谬误还请告知万分感谢如果本文对你有所帮助还请点个关注点个赞~您的支持是笔者不断更新的动力
http://www.sadfv.cn/news/193824/

相关文章:

  • 新开传奇网站180火龙网站建设合同印花税
  • 深圳营销型网站策划北京网站建设华网
  • 传奇网站架设方法免费建站网站网页
  • 建网站有哪些费用汕头企业网络推广
  • 苏州企业网站建设公司只选亿企邦wordpress 本地链接
  • 有限公司网站建设 互成网络地址 四川企业查询网
  • 做网站维护要什么专业Apple 手机网站制作
  • 寿光做网站的公司广告公司网站制作
  • 手机在线做ppt的网站python app开发
  • 公司备案证查询网站查询系统解除网站开发合同 首付款是否退
  • 金融培训网站源码网站做404好处
  • 滁州建设网站公司大朗做网站公司
  • 网站怎么做h5支付宝支付接口在线ui设计
  • 网站怎么设置标题广州网站建设费用多少
  • 马大姐网站建设目的网页设计免费网站推荐
  • 哪个公司做网站最好深圳中装建设董事长
  • 论文网站建设的参考文献有什么好的免费网站做教育宣传语
  • 网站建设wang.cd南阳专业网站建设
  • 六安新安人才网在线网站优化公司
  • 哈尔滨专业建网站方案网络平台怎么弄
  • 做滋补品销售有什么网站深圳营销型网站建设-龙华信科
  • 企业信息网站外贸seo网站大全
  • 电子商务网站建设类型如何使网站做的更好
  • 贵州省网站备案网站建设新闻咨询
  • 网站内容方案淮北建设工程交易中心
  • 湛江建站模板万网官网电话
  • 三河建设厅公示网站网络营销策划有哪些
  • 北京网站建设方案哪家好智慧医疗软件公司排名
  • 网站搭建策略与方法是什么建筑焊工证查询网站官方网
  • 网易云音乐网站开发介绍高校网站建设汇报