python实现线下缓存最优算法

对于现代计算机为了加快数据存储速度,一般会采用多级缓存的方法,以最简单的二级缓存来说,数据会存放在两个地方,一个地方就是存在内存当中,另一个存放的地方就是存放在硬盘当中,但是这两个地方数据读取的速度是完全不同的。

而CPU从内存中读取数据的速度是要远远快与从硬盘中读取数据的速度,但问题在于缓存的价格是要远远高于硬盘的价格的,所以缓存的内容就会远远小于硬盘的容量。当CPU需要读取特定的数据的时候,CPU就会现在内存当中进行查找,如果数据已经存储在内存中,它就可以直接读取。

而当数据是没有存储在内存当中的时候,那么CPU就会把数据从硬盘当中读取出来,然后存放在缓存当中,这里的问题主要在于如果内存已经被用完了,那么CPU就必须先将内存当中存储的某些数据输出到硬盘当中去,空出空间来以便存放要从硬盘当中读取的数据。

而当CPU从内存中得到他想要获取的数据的时候,我们就可以成为cache hit,当CPU发现内存中不存在想要读取的数据的时候,我们就称为cache miss,由于内存是有限的,我们就需要设计高效的缓存调度算法以便决定当需要把数据从内存输出到硬盘时,如何选择要调出的数据以便让cache miss的次数尽可能的少。

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

例如如上的例子,如何在已经装满了4条数据的情况下,要将某一条数据进行迁出,将空出来的位置留给下数据e的话,这就是缓存调度算法所需要解决的问题。

在这里可以考虑使用最远优先原则来进行算法实现,在已知未来数据访问的情况下,要调度内存中缓存的数据的时候,可以采用最远优先原则,也就是在决定从内存中迁出那条数据的时候,我们看当前在内存中的数据,在即将读取的数据中,哪一条离当前要写入的数据最远。

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

使用python实现的最远优先原则算法如下:

cache_size = 8
C = np.zeros((cache_size))
items = 16  #16种不同的数据
item_count = 100  #需要读取100条数据
R = np.zeros((item_count))
for i in range(item_count):R[i] = random.randint(1, 17)
item_map = {}
cache_miss = 0
for i in range(len(R)):if R[i] in item_map.keys():  #将数据与它在R中位置对应起来l = item_map[R[i]]  l.append(i)else:l = []l.append(i)item_map[R[i]] = l
for i in range(len(R)): #模拟读取每一条数据cache_hit = Falseitem_save = Falsefor c in C:  #检测缓存是否存在要读取的数据if c == R[i]:cache_hit = Truebreakif cache_hit is False:cache_miss += 1for j in range(len(C)):  #如果缓存还有可用空间,将数据放入缓存if C[j] == 0:C[j] = R[i]item_save = Trueitem_map[R[i]].pop(0)breakif item_save is False:  #缓存已满,根据最远优先原则置换max_distance = 0item_selected = 0for j in range(len(C)):l = item_map[C[j]]if len(l) == 0:  #缓存中的元素不会再从R中被读取,因此将其置换出去item_selected = jbreakdistance = item_map[C[j]][0]if distance > max_distance:max_distance = distanceitem_selected = jC[j] = R[i]  #将离要读取数据最远的缓存数据进行置换item_map[R[i]].pop(0)
print("the count of least cache miss is : ", cache_miss)    

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

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

相关文章

Spring Boot使用MongoDB详解

点击下载《Spring Boot使用MongoDB详解》 1. 前言 本文将详细介绍如何在Spring Boot项目中集成MongoDB数据库,包括其原理、使用流程、步骤以及完整的代码示例。通过本文,读者将能够了解Spring Boot与MongoDB的集成方式,掌握在Spring Boot应…

matlab滤波器设计

1、内容简介 略 51-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab滤波器设计-butter、ellip、cheby1、cheby2_哔哩哔哩_bilibili 4、参考论文 略

光量子计算公司ORCA将在英国国家量子计算中心部署量子计算测试平台

内容来源:量子前哨(ID:Qforepost) 编辑丨慕一 编译/排版丨沛贤 深度好文:800字丨7分钟阅读 全栈光量子计算系统公司ORCA Computing 将为英国国家量子计算中心(NQCC)搭建量子计算测试平台并提…

cad技巧

cad技巧 直线,斜线 移动,偏移,复制 圆,椭圆,圆弧 打断,延伸 线型比例,圆角,分解,文字编辑 矩形,合并,多段线,样条曲线 倒角&#xff…

上海AI Lab联合上交推出复杂图表推理多模态评测基准ChartX与基座模型ChartVLM

近期,众多多模态大语言模型(MLLM)相继问世。然而,这些模型对于视觉图表中所包含的信息的感知能力以及推理能力尚未得到充分的挖掘与探索。本研究中,为了对现有的 MLLM 在图表领域的性能进行全方位、严格的评估&#xf…

电机Id Iq区别

电机Id Iq区别 交流电机的id和iq是什么 交流电机的id和iq是什么 (初学者必须掌握的交流电机基础知识) 交流电机是现代工业中广泛使用的一种电动机,它具有高效、可靠、节能等优点。但是,对于初学者来说,掌握交流电机的…

pytorch简单新型模型测试参数

import torch from torch.nn import Conv2d,MaxPool2d,Sequential,Flatten,Linear import torchvision import torch.optim.optimizer from torch.utils.data import DataLoader,dataset from torch import nn import torch.optim.optimizer# 建模 model nn.Linear(2,1)#损失 …

【leetcode每日一题】【滑动窗口长度固定】案例

567. 字符串的排列 长度不变 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 ****的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 思路:s1长度固定的窗…

Vue项目创建——每一步都有记录和说明

文章目录 1. 首先下载Node2. 全局安装vue/cli3. 创建Vue项目4. 启动Vue项目 1. 首先下载Node 既然都开始创建Vue项目了,想必大家电脑里面都有Node跟npm了,这里就不赘述了。 2. 全局安装vue/cli vue/cli是什么 vue/cli 是一个全局安装的 npm 包&#x…

网络质量分析,DNS解析慢、网页经常打开失败、慢等

抓包统计分析DNS:解析用时、解析结果、解析状态 如图 #_*_ coding:utf8 _*_ ## 网络质量分析,DNS解析慢、网页经常打开失败、慢等 ## 抓包分析DNS:解析用时、解析结果、解析状态 # 2024-02-22 # Linux tcpdump 抓包示例:tcpdump …

Netron可视化工具、Pytorch中文文档等在线工具

一、Netron可视化工具 二、Caffe、ONNX、TensorFlow到NCNN等的转换工具 三、Pytorch中文文档

AIGC学习笔记——DALL-E2详解+测试

它主要包括三个部分:CLIP,先验模块prior和img decoder。其中CLIP又包含text encoder和img encoder。(在看DALLE2之前强烈建议先搞懂CLIP模型的训练和运作机制,之前发过CLIP博客) 论文地址:https://cdn.openai.com/pap…

SpringMVC作用域传递数据

javaEE一共有四个作用域:分别是: application(ServletContext )、session、request、page; jsp中: ${requestScope.message} ${sessionScope.message} ${applicationScope.message} application a…

常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好

PFA容量瓶规格参考:10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验,也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…

MCU独立按键单控LED实现

##江科大视频学习,并且对具体的一些小细节进行更详细的分析。 什么是独立按键? 轻触按键:相当于是一种电子开关,按下开头接通,松开时开头断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。 注意…

亿道丨三防平板也有国产,六大特点你知道多少?

国产三防平板是指由国内厂商自主研发和生产的具有防水、防尘和防摔等特性的平板电脑产品。与一般的平板电脑相比,国产三防平板有以下特点: 防护性能更好:国产三防平板采用的材料、密封性能以及相关的防护设计都经过严格测试和认证&#xff0c…

经典枚举算法

解析: 首先答案肯定是字符串的某个前缀,然后简单直观的想法就是枚举所有的前缀来判断,我们设这个前缀串长度为 lenx ,str1 的长度为 len1,str2 的长度为 len2,则我们知道前缀串的长度必然要是两个字符串长…

AI语音系统电销机器人系统搭建,电话机器人源码是干嘛的?

电话机器人是干嘛的?电话机器人有用吗?自从电话机器人的出现,大家对电话销售有了新的认识。是什么黑科技竟然如此厉害,在没有员工操作的情况下,能够快速地筛选意向客户。与此同时,还能将客户的信息整理好。…

SpringBoot源码解读与原理分析(三十二)SpringBoot整合JDBC(一)JDBC组件的自动装配

文章目录 前言第10章 SpringBoot整合JDBC10.1 SpringBoot整合JDBC的项目搭建10.1.1 初始化数据库10.1.2 整合项目10.1.2.1 导入JDBC和MySQL驱动依赖10.1.2.2 配置数据源 10.1.3 编写业务代码10.1.3.1 编写与t_user表对应的实体类User10.1.3.2 编写Dao层代码10.1.3.3 编写Servic…

golang实现一个BasicAuth的HTTP server

之前写的《golang实现一个简单的HTTP server》没有包含认证部分 本例给出了支持BasicAuth的实现,以及如何在一个项目中导入自己定义的package 编写代码 创建项目所在文件夹 adminhpc-1:~/go$ mkdir auth_http adminhpc-1:~/go$ cd auth_http adminhpc-1:~/go/auth…