当前位置: 首页 > 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://wiki.neutronadmin.com/news/193824/

相关文章:

  • 建设网站的费用怎么做账上海设计网站大全
  • 上海高端品牌网站建设专家云服务器免费
  • 河池网站开发工程师招聘网html5做网页
  • 高中信息技术课网站怎么做汕头中英文网站推广
  • 山西科技网站建设网页制作中的常见问题
  • 乐清建设路小学网站图片转换链接生成器
  • 淄博网站建设网宽汉口网站优化
  • 频繁从一个网站链接到另一个网站会影响百度收录么网页开发者工具怎么用
  • 做女朋友的网站学习资料网
  • 如何开发微信微网站wordpress购物分享主题
  • 图片比较多的网站怎么做中国交通建设集团有限公司
  • 网站后台构建网站付款链接怎么做
  • 厦门市建设局查询保障摇号网站网站后缀意思
  • 快速收录网站内页微信公众平台开发者文档
  • 网站备案意味着什么自动化培训网站建设
  • 做门的网站建设南宁手机建站公司
  • 自己做网站实时监控自己搭建服务器访问国外网站
  • 怎么做网站的后台维护贵州住房与城乡建设部网站
  • 酒店设计网站建设方案娱乐网站的代理怎么做
  • 文山建设5G网站万网建设网站
  • 图片 展示 网站模板百度一下就知道手机版
  • 移动电子商务网站建设网站建设策划书是有谁编写的
  • 哪个网站专门做邮轮旅游的中国建设银行官网站汽车卡
  • 建设网站出现400错误安卓市场官方版app下载
  • 多终端网站网站建设要学多少课程
  • 西安推荐企业网站制作平台北京网站建设的价格天
  • 本土建站工作室wordpress 整体搬家
  • 电子商务网站建设精英如何在手机上制作动画
  • 本地wordpress 跳转包头seo优化
  • 常州微网站建设网站模板开发