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

医院网站方案济南公司网站推广优化最大的

医院网站方案,济南公司网站推广优化最大的,廊坊代运营公司,群晖nas可以做网站吗如何实现异步并发限制 文章目录 如何实现异步并发限制方法1注意点 方法2题目要求实现方法注意点 之前一直没有系统的去总结异步并发限制的实现思路,今天就来做个总结吧 方法1 只有一个变量 pool:代表正在执行中的任务中的集合 function sleep(name, t…

如何实现异步并发限制

文章目录

  • 如何实现异步并发限制
    • 方法1
      • 注意点
    • 方法2
      • 题目要求
      • 实现方法
      • 注意点

之前一直没有系统的去总结异步并发限制的实现思路,今天就来做个总结吧

方法1

只有一个变量
pool:代表正在执行中的任务中的集合

function sleep(name, timeOut) {return new Promise(resolve => {console.log(`${name}开始了`);setTimeout(() => {console.log(`${name}结束了`);resolve();}, timeOut);})}const tasks = [() => sleep(1, 1000),() => sleep(2, 2000),() => sleep(3, 3000),() => sleep(5, 6000),() => sleep(8, 8000),];async function parallelLimit(tasks, limit = 2) {// 正在执行中的任务的集合const pool = new Set();for (const task of tasks) {const promise = task();pool.add(promise);promise.then(() => pool.delete(promise));if (pool.size >= limit) {await Promise.race(pool);}}return Promise.all(pool);}parallelLimit(tasks).then(() => {console.log('任务已全部执行');})

注意点

  1. 此时的 pool 代表的是:正在执行中的任务中的集合
  2. 使用 Promise.race 这种方式不能保证执行顺序,若要求要按顺序执行,请看第二种方法

方法2

题目要求

要求实现 Scheduler 函数,完成异步并发限制数为2的功能,且需要保证执行顺序

const scheduler = new Scheduler(2);const timeout = (time) =>new Promise((resolve) => {setTimeout(resolve, time);});const addTask = (time, order) => {scheduler.add(() => timeout(time).then(() => console.log(order)))
}addTask(1000, '1')
addTask(500, '2')
addTask(300, '3')
addTask(400, '4')// 500ms时,2完成,输出2
// 800ms时,3完成,输出3
// 1000ms时,1完成,输出1
// 1200ms时,4完成,输出4

实现方法

function Scheduler(limit) {// 模拟队列,保存所有任务this.pool = [];// 当前正在执行任务的数目this.count = 0;this.add = function (fn) {this.pool.push(fn);this.run();}this.run = function () {if (this.pool.length && this.count < limit) {const task = this.pool.shift(); // 保证执行顺序this.count++;task().then(() => {this.count--;this.run();})}}
}const scheduler = new Scheduler(2);const timeout = (time) =>new Promise((resolve) => {setTimeout(resolve, time);});const addTask = (time, order) => {scheduler.add(() => timeout(time).then(() => console.log(order)))
}addTask(1000, '1')
addTask(500, '2')
addTask(300, '3')
addTask(400, '4')// 500ms时,2完成,输出2
// 800ms时,3完成,输出3
// 1000ms时,1完成,输出1
// 1200ms时,4完成,输出4

注意点

  1. pool 代表保存所有任务的数组
  2. count 代表当前正在执行任务的数目
  3. 保证顺序:需要从数组中顺序取出并执行

两个方法各变量代表的含义不同,实现的思路也就不同,要好好区分两种方法的思想,不然会混淆(像我一样☁️☁️☁️)


道阻且长,面试加油,边复习边查漏补缺吧!!!

passion!!!

http://www.hkea.cn/news/649336/

相关文章:

  • 小地方的旅游网站怎么建设seo教程有什么
  • 做网站教程宁波百度seo点击软件
  • asp.net个人网站北京专门做seo
  • 石家庄java开发做网站百度资源站长平台
  • 有哪些网站系统网络营销首先要进行
  • 网站建设硬件设置竞价广告是怎么推广的
  • 网站的平面设计图用ps做国外搜索引擎大全百鸣
  • 深圳专业企业网站建设前端培训
  • 南京平台公司seo搜索培训
  • 横沥网站建设武汉百度百科
  • 百度给做网站公司线上运营的5个步骤
  • 盘锦网站建设公司网络营销策略包括哪些
  • 简述电子商务网站开发的基本原则一站式网络营销
  • 商丘网站网络推广员的工作内容和步骤
  • 取消wordpress邮箱认证北京搜索优化排名公司
  • 千库网素材南宁seo优势
  • 西安机场商务宾馆百度做网站怎么在百度上做网站
  • ps网站建设seo网络公司
  • 网站建设步骤 教 程网站怎么做谷歌推广
  • 网站制作需要注意什么潍坊做网站哪家好
  • 专门做团购的网站有哪些色盲图
  • 百度做网站续费费用百度营业执照怎么办理
  • 深圳网站建设方维网络企业网站制作要求
  • 制作好网站黑帽seo教程
  • 云南 网站建设网站seo优化对网店的推广的作用为
  • 网站建设免费国外舆情服务公司
  • 怎么做网站banner查排名网站
  • 做网站好看的背景图片相关搜索优化软件
  • 怎么查网站是哪家制作公司做的百度收录查询
  • 企业年金交了有好处吗网络优化工程师吃香吗