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,一经查实,立即删除!

相关文章

matlab滤波器设计

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

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

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

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

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

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 …

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

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

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

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

MCU独立按键单控LED实现

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

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

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

经典枚举算法

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

Oracle内存计算应用模式

前言 内存计算是利用内存来加速数据访问和应用的性能,并降低应用开发复杂度的技术。近十年来,随着软硬件技术的发展和用户需求的成熟,内存计算技术已经得到了广泛地应用。 Oracle在内存计算领域具有非常重要的地位,这主要得益于…

数据库应用:Windows 部署 MySQL 8.0.36

目录 一、实验 1.环境 2.Windows 部署 MySQL 8.0.36 3.Windows配置环境变量 4.Navicat链接MySQL 二、问题 1.安装MySQL 报错 一、实验 1.环境 (1)主机 表1 主机 主机软件版本IP备注WindowsMySQL8.0.36localhost 2.Windows 部署 MySQL 8.0.…

最新Sora人工智能视频资源网址分享

1,了解什么是Sora * 什么是 OpenAI Sora? Sora 是由 OpenAI 开发的文本到视频模型。它可以按照用户的提示生成长达一分钟的高质量和一致的视频。 * 如何使用 OpenAI Sora 模型? 目前,OpenAI Sora 模型处于内测阶段,并将…

Linux软件高级编程-进程基本概念--day6

1.进程: 程序: 存放在外存的一段数据组成的文件 进程: 是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1)top: 动态查看当前系统中所有进程信息&#xff08…

STM32程序(移植)中头文件的路径

例:#include "./BSP/LCD/lcd.h"为什么有的头文件加了路径? 先看AI的回答: 在C和C编程中,当我们在源文件中包含(或称为“引入”或“导入”)一个头文件时,编译器需要知道这个头文件的位置。通常,编译器会在…

FariyGUI × Cocos Creator 3.x 弹窗制作

在fgui里制作一个弹窗 新建一个按钮,作为返回按钮 新建一个标签 做成这个样子 其中包含两个节点,名称分别为title和closeButton 可以阅读fgui的源码window.js得到,closeButton按钮只需要输入名称即可在contentPane设置时自动绑定。 且会…

【C++ QT项目5】——基于HTTP与JSON数据流的天气预报界面设计

【C QT项目5】——基于HTTP与JSON数据流的天气预报界面设计 一、项目概述二、UI设计与stylesheet样式表三、天气预报数据接口四、JSON数据4.1 概述4.2 QT生成JSON数据4.3 QT解析JSON数据4.4 将JSON数据解析到QMap中 五、软件开发网络通信架构5.1 BS架构/CS架构5.2 HTTP基本概念…

MyBatis使⽤PageHelper(MySQL)

MyBatis使⽤PageHelper(MySQL) 一、 limit分⻚二、PageHelper插件第⼀步:引⼊依赖第⼆步:在mybatis-config.xml⽂件中配置插件第三步:编写Java代码第四步:格式化结果查看 三、SpringBoot3 集成 PageHelper …

爬虫入门四(抽屉半自动点赞、xpath使用、动作链、打码平台、scrapy框架介绍与安装及创建项目)

文章目录 一、抽屉半自动点赞二、xpath的使用三、动作链四、打码平台介绍超级鹰打码基本测试 五、自动登录超级鹰六、scrapy框架介绍安装创建爬虫项目 一、抽屉半自动点赞 登录抽屉账号保存cookiesimport timeimport jsonfrom selenium import webdriverfrom selenium.webdrive…

(正规api接口代发布权限)短视频账号矩阵系统源码独立搭建技术开发

短视频账号矩阵系统源码独立搭建技术开发: 搭建短视频账号矩阵系统源码独立技术开发需要以下步骤: 1. 确定需求:明确系统需要实现的功能和目标,包括账号管理、视频发布、数据分析等。 2. 学习相关知识和技术:了解短视…