[JS面试题]面试官:实现一个调度器,最多只能同时有两个任务同时进行

[JS面试题]面试官:实现一个调度器,最多只能同时有两个任务同时进行

这个调度器的工作方式是,它会持续检查任务队列,并且每次最多启动两个任务。当一个任务完成(无论是成功还是失败)时,它会立即尝试启动下一个任务,直到队列中没有任务或者达到最大并发数的限制。这种模式在处理I/O密集型任务或者需要限制资源使用的场景中非常有用。

// 实现一个调度器,最多只能同时有两个任务同时进行interface TaskNode {task: any;resolve: any;reject: any;
}class SuperTask {maxCount = 2;taskList: TaskNode[] = [];// 进行中的任务数runningCount = 0;add(task) {return new Promise((resolve, reject) => {this.taskList.push({task,resolve,reject,});this._run();});}_run() {while (this.runningCount < this.maxCount && this.taskList.length > 0) {const { task, resolve, reject } = this.taskList.shift() as TaskNode;this.runningCount++;task().then(resolve, reject).finally(() => {this.runningCount--;this._run();});}}
}const timeout = (time)=>{return new Promise<void>((resolve)=>{setTimeout(()=>{resolve()}, time)})
}const superTask = new SuperTask();
function addTask(time, name) {superTask.add(() => timeout(time)).then(() => console.log(`任务${name}完成`));
}addTask(10000, '任务1'); // 1000毫秒后输出 任务1完成
addTask(5000, '任务2'); // 500毫秒后输出 任务2完成
addTask(3000, '任务3'); // 300毫秒后输出 任务3完成
addTask(4000, '任务4'); // 400毫秒后输出 任务4完成
addTask(5000, '任务5'); // 500毫秒后输出 任务5完成// 打印顺序
// 任务任务2完成   5s   [1,2]=>[1,3]
// 任务任务3完成   8s   [1,3]=>[1,4]
// 任务任务1完成   10s  [1,4]=>[4,5]
// 任务任务4完成   12s  [4,5]=>[5]
// 任务任务5完成   15s  [5]=>[]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP 超级全局变量详解

在PHP编程中&#xff0c;超级全局变量&#xff08;Super Global Variables&#xff09;是一种特殊的变量&#xff0c;可以在脚本的任何地方访问&#xff0c;而不受作用域限制。它们被设计用于在不同的脚本文件、函数和类之间共享数据&#xff0c;是PHP语言中非常重要和实用的特…

Knife4j 2.2.X 版本 swagger彻底禁用

官方文档配置权限&#xff1a;https://doc.xiaominfo.com/v2/documentation/accessControl.html#_3-5-1-%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E5%B1%8F%E8%94%BD%E8%B5%84%E6%BA%90 通常有时候我们碰到的问题如下&#xff1a; 在开发Knife4j功能时,同很多开发者经常讨论的问…

c语言预处理和可变参数的使用

概述 预处理名称意 义#define宏定义#undef撤销已定义过的宏名#include使编译程序将另一源文件嵌入到带有#include 的源文件中#if如果条件为真&#xff0c;则执行相应操作#elif如果前面条件为假&#xff0c;而该条件为真&#xff0c;则执行相应操作#else如果前面条件均为假&…

MySQL数据库简介和安装

文章目录 一、数据库原理目前情况数据库的发展史RDBMS关系型数据库关系型数据库理论 二、MySQL历史发展历程关系型数据库和非关系型数据库 三、安装mysql及优化yum安装编译安装mysql二进制安装优化操作 四、 安装mycli插件客户端工具 一、数据库原理 目前情况 我们正处于一个…

考研:数学一/二 和英语一/二 有什么区别

考研数学一/二 区别&#xff1a; 考试内容&#xff1a; 数学一&#xff1a;考查内容包括高等数学、线性代数、以及概率论与数理统计&#xff0c;覆盖的知识面较为全面&#xff0c;题目难度也相对较高。数学二&#xff1a;考试内容包含高等数学和线性代数&#xff0c;不包括概率…

聚观早报 | 真我GT6官宣;iQOO 13参数细节曝光

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月26日消息 真我GT6官宣 iQOO 13参数细节曝光 苹果iPadOS 18 Beta 2更新 一加Ace 3 Pro散热细节曝光 亚马逊秘…

Redis-主从复制-配置主从关系

文章目录 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录2、修改protected-mode 为no,取消保护模式3、查看redis的进程状态4、配置6380是6379的从机5、配置6381是6379的从机6、查看主机 6379 的主从信息 1、修改配置文件中的 bind ,注释该配置,取消绑定仅主机登录 …

【MySQL】(基础篇十七) —— 存储过程

存储过程 本文将介绍什么是存储过程&#xff0c;为什么要使用存储过程以及如何使用存储过程&#xff0c;并且介绍创建和使用存储过程的基本语法。 MySQL的存储过程是预编译的SQL语句集合&#xff0c;它们作为一个可执行单元存储在数据库中。存储过程能够封装复杂的业务逻辑&a…

leetcode-19-回溯

引自代码随想录 [77]组合 给定两个整数 n 和 k&#xff0c;返回 1 ... n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4]] 1、大致逻辑 k为树的深度&#xff0c;到叶子节点的路径即为一个结果 开始索引保证不重复…

1.1章节print输出函数语法八种 使用和示例

1.打印变量和字符串 2-4.三种使用字符串格式化 5.输出ASCLL码的值和中文字符 6.打印到文件或其他对象&#xff08;而不是控制台&#xff09; 7.自定义分隔符、和换行符和结束符 8.连接符加号连接字符串 在Python中&#xff0c;print() 函数用于在控制台上输出信息。这是一个非常…

docker原理记录C-N-A

docker原理 容器技术的兴起源于 PaaS 技术的普及 Docker 项目通过“容器镜像”&#xff0c;解决了应用打包这个根本性难题容器本身没有价值&#xff0c;有价值的是“容器编排”Cgroups 和 Namespace Cgroups 技术是用来制造约束的主要手段&#xff0c;而Namespace 技术则是用…

CRM软件:如何提升团队的销售效率?

销售是企业的驱动力。如果没有一支强大的销售团队&#xff0c;企业很难在当今激烈的竞争中发展壮大并取得成功。为了确保成功&#xff0c;企业需要专注于提高销售效率。 但销售效率到底是什么&#xff1f;企业如何优化和衡量其成功与否&#xff1f;本文将详细解答这些问题。 …

兴趣爱好广泛的人,如何填报高考志愿选专业?

一般来说&#xff0c;高考填报志愿都要以自己的兴趣为基础。但是对于有一些比较优秀的同学来说&#xff0c;自己的兴趣可能是非常广&#xff0c;涉及到各个专业方方面面。有些同学琴棋书画样样精通&#xff0c;对于很多的专业&#xff0c;他们都充满了兴趣&#xff0c;而且兴趣…

Java-方法引用

方法引用概念 把已经有的方法拿过来用&#xff0c;当做函数式接口中抽象方法的方法体 前提条件 1、引用处必须是函数式接口 2、被引用的方法必须已经存在 3、被引用方法的形参和返回值 需要跟抽象方法保持一致 4、被引用方法的功能要满足当前需求 方法引用格式示例 方…

第四天 怎么又迟到了呀 哎啥时候来准时上个课呀

泛型编程 Traits实现&#xff0c;是什么 泛型编程&#xff08;Generic Programming&#xff09;是一种通过编写与特定类型无关的代码来实现代码复用和抽象的编程范式。 在C中&#xff0c;模板&#xff08;Templates&#xff09;是实现泛型编程的主要手段。 Traits&#xff0…

一文入门CMake

我们前几篇文章已经入门了gcc和Makefile&#xff0c;现在可以来玩玩CMake了。 CMake和Makefile是差不多的&#xff0c;基本上是可以相互替换使用的。CMAke可以生成Makefile&#xff0c;所以本质上我们还是用的Makefile&#xff0c;只不过用了CMake就不用再写Makefile了&#x…

【ajax实战05】文章封面发布

一&#xff1a;实现效果 二&#xff1a;实现步骤 1 准备标签结构和样式 html结构样式 <div class"cover"><label for"img">封面&#xff1a;</label><label for"img" class"place"></label><inpu…

2025秋招NLP算法面试真题目录

2025 秋招 NLP 算法面试真题专栏包含&#xff1a;预训练模型、文本表征、文本相似度、文本分类、多模态、知识蒸馏、词向量等内容&#xff0c;涵盖全面&#xff0c;实用性强。欢迎订阅&#xff0c;专栏将持续更新&#xff0c;助力您的秋招备战&#xff01; 深度学习自然语言处…

CS-隐藏防朔源-数据转发-中间件反向代理-Apache

目录 1、代理机安装Apache: 2、中间件设置转发&#xff1a; 添加代理 3、重启Apache服务 4、CS监听器配置转发机IP 实战情况下还是要准备两台外网服务器. --还是做个中转 1、代理机安装Apache: apt-get install apache2 a2enmod proxy proxy_ajp proxy_balancer proxy_co…

路由(urls)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Django的URL路由流程&#xff1a; l Django查找全局urlpatterns变量&#xff08;urls.py&#xff09;。 l 按照先后顺序&#xff0c;对URL逐一匹…