java模拟进程调度
先来先服务+优先级调度+短作业优先调度+响应比优先调度
代码
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double arriveTime;//提交时间double runningTime;//运行时间int youxianshu;//优先数double jinrushuchujingshijian;//进入输出#时间double startRunningTime;//开始运行时间double shangxvyunxingshijian;//尚需运行时间double runningEndTime;//运行结束时间double zhouzhuanshijian;//周转时间double saiquanzhouzhuanshijian;//带权周转时间int order;//运行次序double xingyingbi;//响应比public int getId() {return id;}public void setId(int id) {this.id = id;}public char getJinchengname() {return jinchengname;}public void setJinchengname(char jinchengname) {this.jinchengname = jinchengname;}public int getJinchengId() {return jinchengId;}public void setJinchengId(int jinchengId) {this.jinchengId = jinchengId;}public double getArriveTime() {return arriveTime;}public void setArriveTime(double arriveTime) {this.arriveTime = arriveTime;}public double getRunningTime() {return runningTime;}public void setRunningTime(double runningTime) {this.runningTime = runningTime;}public int getYouxianshu() {return youxianshu;}public void setYouxianshu(int youxianshu) {this.youxianshu = youxianshu;}public double getJinrushuchujingshijian() {return jinrushuchujingshijian;}public void setJinrushuchujingshijian(double jinrushuchujingshijian) {this.jinrushuchujingshijian = jinrushuchujingshijian;}public double getStartRunningTime() {return startRunningTime;}public void setStartRunningTime(double startRunningTime) {this.startRunningTime = startRunningTime;}public double getShangxvyunxingshijian() {return shangxvyunxingshijian;}public void setShangxvyunxingshijian(double shangxvyunxingshijian) {this.shangxvyunxingshijian = shangxvyunxingshijian;}public double getRunningEndTime() {return runningEndTime;}public void setRunningEndTime(double runningEndTime) {this.runningEndTime = runningEndTime;}public double getZhouzhuanshijian() {return zhouzhuanshijian;}public void setZhouzhuanshijian(double zhouzhuanshijian) {this.zhouzhuanshijian = zhouzhuanshijian;}public double getSaiquanzhouzhuanshijian() {return saiquanzhouzhuanshijian;}public void setSaiquanzhouzhuanshijian(double saiquanzhouzhuanshijian) {this.saiquanzhouzhuanshijian = saiquanzhouzhuanshijian;}public int getOrder() {return order;}public void setOrder(int order) {this.order = order;}public tasks(int id, char jinchengname, int jinchengId, double arriveTime, double runningTime, int youxianshu) {this.id = id;this.jinchengname = jinchengname;this.jinchengId = jinchengId;this.arriveTime = arriveTime;this.runningTime = runningTime;this.youxianshu = youxianshu;}public double getXingyingbi() {return xingyingbi;}public void setXingyingbi(double xingyingbi) {this.xingyingbi = xingyingbi;}}public static void main(String[] args) {List<tasks> tasksList=new ArrayList<>();System.out.println("请输入task个数");Scanner sc=new Scanner(System.in);int n=sc.nextInt();for (int i = 0; i < n; i++) {System.out.println("请依次输入第"+(i+1)+"个进程的序号 进程名 进程号 到达时间 运行时间 优先数");int id=sc.nextInt();char jingchengname=sc.next().charAt(0);int jingchengid= sc.nextInt();double arrivetime= sc.nextDouble();double runningtime= sc.nextDouble();int youxianshu= sc.nextInt();tasksList.add(new tasks(id,jingchengname,jingchengid,arrivetime,runningtime,youxianshu));}//选择调度System.out.println("1.先来先服务");System.out.println("2.优先级调度");System.out.println("3.短作业优先调度");System.out.println("4.响应比高者优先调度");int ch=sc.nextInt();switch (ch){case 1:xianlaixianfuwu(tasksList);break;case 2:youxianjidiaodu(tasksList);break;case 3:duanzuoyeyouxian(tasksList);break;case 4:xiangyingbigaoyouxian(tasksList);break;}}public static void xianlaixianfuwu(List<tasks> tasksList) {//先来先服务Comparator<tasks> comparator=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator);int order=0;double time=tasksList.get(0).arriveTime;//此时时间点for (tasks tasks : tasksList) {order++;tasks.setOrder(order);if(time>= tasks.arriveTime){tasks.startRunningTime=time;}else {time=tasks.arriveTime;//这里少些一句这个else 才看到 补上了}time+= tasks.runningTime;tasks.runningEndTime=time;tasks.zhouzhuanshijian=tasks.runningEndTime-tasks.arriveTime;tasks.saiquanzhouzhuanshijian=tasks.zhouzhuanshijian / tasks.runningTime;System.out.println("序号\t"+"进程名\t"+"进程号\t"+"到达时间\t"+"运行时间\t"+"优先数\t"+"开始运行时间\t"+"运行结束时间\t"+"周转时间\t"+"带权周转时间(左->右)");System.out.println(tasks.id+" "+tasks.jinchengname+" "+tasks.jinchengId+" "+ tasks.arriveTime+" "+ tasks.runningTime+" "+ tasks.youxianshu+" "+tasks.startRunningTime+" "+ tasks.runningEndTime+" "+tasks.zhouzhuanshijian+" "+tasks.saiquanzhouzhuanshijian+" "+ tasks.getOrder());}}public static void youxianjidiaodu(List<tasks> tasksList) {List<tasks> tasksyiwanchengList=new ArrayList<>();//找最先的到达的作为时间time的开始,完成后更新time+=runningtimeComparator<tasks> comparator=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator);//tasksyiwanchangList.add(task001)tasksyiwanchengList.add(tasksList.get(0));double time=tasksList.get(0).arriveTime;//此时时间点tasksList.get(0).startRunningTime=time;time+=tasksList.get(0).runningTime;tasksList.get(0).runningEndTime=time;//tasksList.del(task001)删除最先的到达的tasktasksList.remove(0);//list.for执行下面这行的操作//在剩下的task里&&arrivetime<time也就是已经到达但还没开始的任务里,选执行优先级最高的执行,更新time+=runningtimeint n= tasksList.size();for (int i = 0; i < n; i++) {//每次for里都要完成且只完成一个任务//将未完成的tasks按优先数排序Comparator<tasks> comparator2=Comparator.comparing(tasks:: getYouxianshu);tasksList.sort(comparator2);int flag=0;for (tasks tasks : tasksList) {if(tasks.arriveTime<=time){tasks.startRunningTime=time;time+=tasks.runningTime;tasks.runningEndTime=time;tasksyiwanchengList.add(tasks);tasksList.remove(tasks);flag=1;break;}}if (flag==0){//如果全都没到达,直接移除接下来最早到达的Comparator<tasks> comparator3=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator3);tasksList.get(0).startRunningTime=tasksList.get(0).arriveTime;time+=tasksList.get(0).runningTime;tasksList.get(0).runningEndTime=time;tasksyiwanchengList.add(tasksList.get(0));tasksList.remove(0);}}//最后遍历出结果tasksyiwanchengListint order=0;for (tasks tasks : tasksyiwanchengList) {order++;tasks.setOrder(order);tasks.zhouzhuanshijian=tasks.runningEndTime-tasks.arriveTime;tasks.saiquanzhouzhuanshijian=tasks.zhouzhuanshijian / tasks.runningTime;System.out.println("序号\t"+"进程名\t"+"进程号\t"+"到达时间\t"+"运行时间\t"+"优先数\t"+"开始运行时间\t"+"运行结束时间\t"+"周转时间\t"+"带权周转时间(左->右)");System.out.println(tasks.id+" "+tasks.jinchengname+" "+tasks.jinchengId+" "+ tasks.arriveTime+" "+ tasks.runningTime+" "+ tasks.youxianshu+" "+tasks.startRunningTime+" "+ tasks.runningEndTime+" "+tasks.zhouzhuanshijian+" "+tasks.saiquanzhouzhuanshijian+" "+ tasks.getOrder());}}public static void duanzuoyeyouxian(List<tasks> tasksList) {List<tasks> tasksyiwanchengList=new ArrayList<>();//找最先的到达的作为时间time的开始,完成后更新time+=runningtimeComparator<tasks> comparator=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator);//tasksyiwanchangList.add(task001)tasksyiwanchengList.add(tasksList.get(0));double time=tasksList.get(0).arriveTime;//此时时间点tasksList.get(0).startRunningTime=time;time+=tasksList.get(0).runningTime;tasksList.get(0).runningEndTime=time;//tasksList.del(task001)删除最先的到达的tasktasksList.remove(0);//list.for执行下面这行的操作//在剩下的task里&&arrivetime<time也就是已经到达但还没开始的任务里,选作业runningtime最小的执行,更新time+=runningtimeint n= tasksList.size();for (int i = 0; i < n; i++) {//每次for里都要完成且只完成一个任务//将未完成的tasks按作业长短排序Comparator<tasks> comparator2=Comparator.comparing(tasks:: getRunningTime);//那这么的话和优先级相比只改了这一个单词tasksList.sort(comparator2);int flag=0;for (tasks tasks : tasksList) {if(tasks.arriveTime<=time){tasks.startRunningTime=time;time+=tasks.runningTime;tasks.runningEndTime=time;tasksyiwanchengList.add(tasks);tasksList.remove(tasks);flag=1;break;}}if (flag==0){//如果全都没到达,直接移除接下来最早到达的Comparator<tasks> comparator3=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator3);tasksList.get(0).startRunningTime=tasksList.get(0).arriveTime;time+=tasksList.get(0).runningTime;tasksList.get(0).runningEndTime=time;tasksyiwanchengList.add(tasksList.get(0));tasksList.remove(0);}}//最后遍历出结果tasksyiwanchengListint order=0;for (tasks tasks : tasksyiwanchengList) {order++;tasks.setOrder(order);tasks.zhouzhuanshijian=tasks.runningEndTime-tasks.arriveTime;tasks.saiquanzhouzhuanshijian=tasks.zhouzhuanshijian / tasks.runningTime;System.out.println("序号\t"+"进程名\t"+"进程号\t"+"到达时间\t"+"运行时间\t"+"优先数\t"+"开始运行时间\t"+"运行结束时间\t"+"周转时间\t"+"带权周转时间(左->右)");System.out.println(tasks.id+" "+tasks.jinchengname+" "+tasks.jinchengId+" "+ tasks.arriveTime+" "+ tasks.runningTime+" "+ tasks.youxianshu+" "+tasks.startRunningTime+" "+ tasks.runningEndTime+" "+tasks.zhouzhuanshijian+" "+tasks.saiquanzhouzhuanshijian+" "+ tasks.getOrder());}}public static void xiangyingbigaoyouxian(List<tasks> tasksList) {List<tasks> tasksyiwanchengList=new ArrayList<>();//响应比高优先 当每次进程被调度就要重新计算新的响应比//找最先的到达的作为时间time的开始,完成后更新time+=runningtimeComparator<tasks> comparator=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator);//tasksyiwanchangList.add(task001)tasksyiwanchengList.add(tasksList.get(0));double time=tasksList.get(0).arriveTime;//此时时间点tasksList.get(0).startRunningTime=time;time+=tasksList.get(0).runningTime;tasksList.get(0).runningEndTime=time;//tasksList.del(task001)删除最先的到达的tasktasksList.remove(0);//list.for执行下面这行的操作//在剩下的task里&&arrivetime<time也就是已经到达但还没开始的任务里,选执行响应比最高的执行,更新time+=runningtimeint n= tasksList.size();for (int i = 0; i < n; i++) {//每次for里都要完成且只完成一个任务 然后响应比改变 重新计算新的响应比//计算runningendtime 迭代每个任务是下一次就被调的情况得到的tasks.runningendtimefor (tasks tasks : tasksList) {//好像应该time和arrivetime比较 还没到的要不要算响应比去比较啊??//先按照还没来的就不参与响应比的计算tasks.xingyingbi=-1;//为了计算响应比才暂时赋值 后面每次for里都要完成一个任务时才是正式的赋值if (tasks.arriveTime<=time){//给来的任务计算响应比 不来的响应比默认-1tasks.runningEndTime+=(time+ tasks.runningTime);}}//每次重新计算响应比 所以没个任务的zhouzhuanshijian必须在下面的计算前就已经知道tasks.zhouzhuanshijian=tasks.runningEndTime-tasks.arriveTime;for (tasks tasks : tasksList) {tasks.zhouzhuanshijian=tasks.runningEndTime-tasks.arriveTime;//arrivetime已知不用管 runningendtime必须知道tasks.xingyingbi=1+(tasks.zhouzhuanshijian/ tasks.runningTime);}//将未完成的tasks按响应比排序Comparator<tasks> comparator2=Comparator.comparing(tasks:: getXingyingbi).reversed();//在这之前必须把响应比算出来tasksList.sort(comparator2);int flag=0;for (tasks tasks : tasksList) {if(tasks.arriveTime<=time){tasks.startRunningTime=time;time+=tasks.runningTime;tasks.runningEndTime=time;tasksyiwanchengList.add(tasks);tasksList.remove(tasks);flag=1;break;}}if (flag==0){//如果全都没到达,直接移除接下来最早到达的Comparator<tasks> comparator3=Comparator.comparing(tasks:: getArriveTime);tasksList.sort(comparator3);tasksList.get(0).startRunningTime=tasksList.get(0).arriveTime;time+=tasksList.get(0).runningTime;tasksList.get(0).runningEndTime=time;tasksyiwanchengList.add(tasksList.get(0));tasksList.remove(0);}}//最后遍历出结果tasksyiwanchengListint order=0;for (tasks tasks : tasksyiwanchengList) {order++;tasks.setOrder(order);tasks.zhouzhuanshijian=tasks.runningEndTime-tasks.arriveTime;//arrivetime已知不用管 runningendtime必须知道tasks.saiquanzhouzhuanshijian=tasks.zhouzhuanshijian / tasks.runningTime;System.out.println("序号\t"+"进程名\t"+"进程号\t"+"到达时间\t"+"运行时间\t"+"优先数\t"+"开始运行时间\t"+"运行结束时间\t"+"周转时间\t"+"带权周转时间(左->右)");System.out.println(tasks.id+" "+tasks.jinchengname+" "+tasks.jinchengId+" "+ tasks.arriveTime+" "+ tasks.runningTime+" "+ tasks.youxianshu+" "+tasks.startRunningTime+" "+ tasks.runningEndTime+" "+tasks.zhouzhuanshijian+" "+tasks.saiquanzhouzhuanshijian+" "+ tasks.getOrder());}}
}
运行结果

相关文章:
java模拟进程调度
先来先服务优先级调度短作业优先调度响应比优先调度 代码 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double a…...
大模型AI在教育领域有哪些创业机会?
大模型AI在教育领域有很多创业机会,尤其是在个性化学习、教学辅助、教育资源优化等方面。以下是一些潜在的创业机会: 个性化学习平台 学习路径定制:根据学生的学习数据与兴趣,为他们设计个性化的学习路径,提供适合的课…...
网页上视频没有提供下载权限怎么办?
以腾讯会议录屏没有提供下载权限为例,该怎么办呢? 最好的办法就是找到管理员,开启下载权限。如果找不到呢,那就用这个办法下载。 1.打开Microsoft Edge浏览器的扩展 2.搜索“视频下载”,选择“视频下载Pro” 3.点击“…...
【去哪里找开源商城项目】
有很多途径可以找到开源项目,以下是一些常用的方法: 开源代码托管平台:许多开源项目都托管在平台上,例如GitHub、GitLab和Bitbucket。你可以在这些平台上浏览项目,搜索关键词,查看项目的星级和贡献者数量等…...
ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)
第二届网络、通信与智能计算国际会议(NCIC 2024)将于2024年11月22-25日在北京信息科技大学召开,聚焦网络、通信与智能计算,欢迎国内外学者投稿交流,录用文章将在Springer出版,并提交EI等检索。 NCIC 2024&a…...
vue添加省市区
主要参考“element”框架:Element - The worlds most popular Vue UI framework <div class"block"><span class"demonstration">默认 click 触发子菜单</span><el-cascaderv-model"value":options"optio…...
运维监控丨16条常用的Kafka看板监控配置与告警规则
本期我们针对企业运维监控的场景,介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求,灵活调整和扩展这些监控配置及告警规则。在实际应用场景中,需要综合运用多种监控工具(例如Prometheus、Grafana、Zabbix等&#…...
ECharts饼图,配置标注示例
const color ["#00FFB4", "#5498FD", "#6F54FD", "#FD5454", "#FDA354",]const datas [{ value: 100, name: "一年级" },{ value: 70, name: "二年级" },{ value: 184, name: "三年级" },{…...
【大象数据集】大象图像识别 目标检测 机器视觉(含数据集)
一、背景意义 在信息时代,数据的收集和分析技术得到了飞速发展。深度学习算法的出现,为处理和分析这些复杂的鱼类数据集提供了强大的工具。深度学习具有强大的模式识别和特征提取能力,能够从海量的数据中自动学习和发现规律,为鱼…...
LN 在 LLMs 中的不同位置 有什么区别么
Layer Normalization(LN)是一种在深度学习中用于稳定和加速神经网络训练的归一化技术。它通过对单个样本的所有激活进行归一化来工作,与Batch Normalization(BN)不同,BN是对一个mini-batch中的所有样本的激…...
【代码随想录Day57】图论Part08
拓扑排序精讲 题目链接/文章讲解:代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取文件数量 n 和依赖关系数量 mint n scanner.nextInt();int m scanner.nextInt()…...
记录一次mmpretrain训练数据并转onnx推理
目录 1.前言 2.代码 3.数据形态【分类用】 4.配置文件 5.训练 6.测试-分析-混淆矩阵等等,测试图片效果等 7.导出onnx 8.onnx推理 9.docker环境简单补充 1.前言 好久没有做图像分类了,于是想用商汤的mmclassification快速搞一波,发现已…...
shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
查找美国安全局漏洞 nww.nsa.gov(美国安全局官方网站) net参数使用 搜索指定的ip网段 shodan search --limit 10 --fields ip_str,port net:208.88.84.0/24 (老美国家安全局的一个网段)可能直接访问不太行,可以使用host参数,得到域名再去…...
telnet 密码模式 访问路由器
telnet 密码访问华为路由器 模拟被访问路由 sy [Huawei]int g0/0/0 //选中 g0/0/0端口 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 //设置端口ip [Huawei]user-interface vty 0 4 //配置vty [Huawei-ui-vty0-4]set authentication password cipher huawei123 //设置…...
文心一言 VS 讯飞星火 VS chatgpt (380)-- 算法导论24.4 12题
十二、给出一个有效算法来解决 A x ⩽ b Ax⩽b Ax⩽b 的差分约束系统,这里 b b b 的所有元素为实数,而变量 x i x_i xi 中某个给定的子集是整数。如果要写代码,请用go语言。 文心一言: 差分约束系统问题通常用于解决带有约…...
Unity自定义数组在Inspector窗口的显示方式
了解 单行高度:EditorGUIUtility.singleLineHeight获取 PropertyField 控件所需的高度:EditorGUI.GetPropertyHeight属性是否在Inspector窗口展开:SerializedProperty.isExpanded可重新排序列表类:ReorderableList绘制纯色矩形:EditorGUI.Dr…...
ERC论文阅读(03)--SPCL论文阅读笔记(2024-10-29)
SPCL论文阅读笔记 论文中心思想 这篇论文是研究ERC任务的论文,作者提出了监督原型对比学习的方法用于ERC任务。 论文 EMNLP2022 paper “Supervised Prototypical Contrastive Learning for Emotion Recognition in Conversation” 现存问题 现存的使用监督对…...
Straightforward Layer-wise Pruning for More Efficient Visual Adaptation
对于模型中冗余的参数,一个常见的方法是通过结构化剪枝方法减少参数容量。例如,基于幅度值和基于梯度的剪枝方法。尽管这些方法在传统训练上通用性,本文关注的PETL迁移有两个不可避免的问题: 显著增加了模型存储负担。由于不同的…...
喜讯 | 创邻科技杭州电子科技大学联合实验室揭牌成立!
近日,杭州电子科技大学图书情报专业硕士行业导师聘任仪式暨杭电-创邻图技术与数字化联合实验室(图书档案文物数字云联合研发中心)揭牌仪式在杭州电子科技大学隆重举行。杭州电子科技大学原副校长吕金海、研究生院副院长潘建江,科研…...
海外媒体发稿:如何打造媒体发稿策略
新闻媒体的发稿推广策略对于提升品牌知名度、吸引流量以及增加收入非常重要。本文将介绍一套在21天内打造爆款新闻媒体发稿推广策略的方法。 第一天至第七天:明确目标和定位 在这个阶段,你需要明确你的目标和定位,以便为你的新闻媒体建立一个…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
