通过js实现一个异步并发调度器

本文介绍了在面试中遇到的关于实现一个异步并发调度器的问题。通过设置最大并发数(maxCount)和维护任务数组(tasks)及工作中的任务数组(working),将任务包装为Promise并监控其状态。当任务完成后,从tasks取出新的任务加入working并执行,以此实现并发控制。这是一种通过递归管理并发的解决方案。
摘要由CSDN通过智能技术生成

笔者字节一面的时候遇到了下面这个面试题:

//支持并发的调度器, 最多允许2两任务进行处理
const scheduler = new Scheduler(2)
scheduler.addTask(1, '1’);   // 1s后输出’1'
scheduler.addTask(2, '2’);  // 2s后输出’2'
scheduler.addTask(1, '3’);  // 2s后输出’3'
scheduler.addTask(1, '4’);  // 3s后输出’4'
scheduler.start();

当时由于紧张和经验不够,一下子卡壳了,没能及时做出来(痛哭)
回来后好好想了一下,有了以下的思路:

  1. 首先用一个maxCount记录允许并发的数量,用一个tasks数组保存所有开始之前设定的任务
  2. 我们需要对加入的任务进行一些封装,改成promise,这样就可以获取到完成的状态进行操作
  3. 我们用working数组保存正在运行的任务,用tasks保存还未完成的任务
  4. 在任务完成后,将tasks队列的第一个任务放入working中,并且运行
  5. 如此,通过递归,就可以完成一个并发控制器
// 异步调度器
class Scheduler {
   
    maxCount = 0
    tasks = []
    working = []
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值