cache失效 强制性失效具体什么意思

1.查看公共账号:&&洛杉矶华人资讯网2.搜索账号:&&chineseinla_com
地址: 1351 S Grove Ave, Unit 109,
Ontario, CA 91761
电话: 总机:626-657--21:00(西部时间)
竞价:562-275--18:00(西部时间)
(周一到周五, 周六周日休息)以下试题来自:
填空题2:1Cache经验规则是指大小为N的()Cache的失效率约等于大小为1/2的()Cache的失效率。
直接映像;两路组相连
为您推荐的考试题库
您可能感兴趣的试卷
你可能感兴趣的试题
1.填空题 强制性失效;容量失效;冲突失效2.填空题 直接映像;组相连映像;全相连映像;全相连3.填空题 随机法;先进先出法;最近最少使用法4.填空题 水平处理;垂直处理;分组处理5.填空题 写后读;读后写;写后写温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&缓存是一项在计算中广泛用来提高性能的技术,它将访问频率高的数据或构造成本高的数据存储在内存中。&在web开发中,性能是应用程序好坏的一个重要因素,而缓存对提高性能带来很大的帮助。让我们来看看缓存能解决的问题:&1. 性能——将相应数据存储起来以避免数据的重复创建、处理和传输,可有效提高性能。比如将不改变的数据缓存起来,例如国家列表等,这样能明显提高web程序的反应速度;&2.稳定性——同一个应用中,对同一数据、逻辑功能和用户界面的多次请求时经常发生的。当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的不稳定。&3.可用性——有时,提供数据信息的服务可能会意外停止,如果使用了缓存技术,可以在一定时间内仍正常提供对最终用户的支持,提高了系统的可用性。然后让我们来看看在asp.net中的缓存:1.在asp.net中,提供了专门用于缓存数据的cache对象,它的应用范围是应用程序域。生存期是和应用程序紧密相关的,每当应用程序启动的时候就重新创建cache对象。它与application对象的主要区别就是提供了专门用于缓存管理的特性,比如依赖和过期策略。&2.cache对象定义在system.web.caching命名空间,可以使用httpcontext类的cache属性或page对象的cache属性来得到cache的引用,cache对象除了存储键值对以外,还可以存储.net框架的对象。缓存是把数据保存在内存以便下次调用,但是数据更新后,内存中的数据并没有更新,仍然是以前的数据,要怎样使缓存的数据也更新呢?我们采用依赖和过期策略。有三个方法可以实现:1.文件依赖(file dependency)2.键值依赖(key dependency)&3.基于时间的过期策略首先我们来看文件依赖。文件依赖就是当硬盘上的某个(某些)文件更改时,强制移除缓存数据。例:& cachedependency dep = new cachedependency(server.mappath("file.xml"));& cache.insert("key", "value", dep);注意:文件依赖项是通过使用 cache.insert 并提供引用 xml 文件的 cachedependency 对象添加的。键值依赖,指定缓存中的某个数据项更改时移除。比如我们有key1和key2两个缓存,key2是键值依赖于key1的,但key1发生变化,key2就失效。例://创建key1缓存cache["key1"]="key1 value";//是缓存key2键值依赖于key1string[] dependencykey=new string[1];dependencykey[0]="key1";cachedependency dep=new cachedependency(null,dependencykey);cache.insert("key2", "value2", dep);&基于时间的过期策略,按照预先定义的时间策略来使数据失效,可以是绝对时间(如某个日期的18:00)也可以是相对现在的相对时间。使用太短和太长的过期时间都不行,不是造成用不上的缓存数据,就是缓存了陈旧的数据并加重了缓存负担,所以可以使用高并发的测试来决定过期时间的最佳值。例://绝对时间过期cache.insert("dsn", connectionstring, null, datetime.now.addminutes(2), system.web.caching.cache.noslidingexpiration);//相对时间过期(即上文提到的“”或者“平滑过期”)cache.insert("dsn", connectionstring, null, system.web.caching.cache.noabsoluteexpiration, timespan.fromseconds(10));相似写法:context.Cache.Insert(cacheKey, temp, dp, DateTime.MaxValue, TimeSpan.Zero);---------------------------------------
begin ---------------------------------------[MethodImpl(MethodImplOptions.Synchronized)] //对此方法实现线程同步&&&&&&& public void TestCache()&&&&&&& {&&&&&&&&&&& //add&&&&&&&&&&& System.Web.Caching.CacheDependency dp = new System.Web.Caching.CacheDependency(null, null);&&&&&&&&&&& HttpContext.Current.Cache.Add("key", "value", dp, DateTime.Now.AddHours(2), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);&&&&&&&&&&& HttpContext.Current.Cache.Insert("key", "value");&&&&&&&&&&& HttpContext.Current.Cache.Insert("key", "value", dp);&&&&&&&&&&& //get&&&&&&&&&&& Object cache = HttpContext.Current.Cache["key"];&&&&&&&&&&& //remove&&&&&&&&&&& HttpContext.Current.Cache.Remove("key");&&&&&&& }---------------------------------------
end ---------------------------------------
阅读(2495)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'ASP.NET中Cache过期策略',
blogAbstract:'以下是网上搜索的资料,仅供参考:资料一:ASP.NET缓存中Cache过期的三种策略(转自51CTO) 我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存。',
blogTag:'cache过期策略',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:2,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
对Cache失效问题的研究
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Cache中的MESI协议基本知识介绍 - 文章 - 伯乐在线
& Cache中的MESI协议基本知识介绍
Cache相关概念解释
#0. 前言背景.
本文为本人在阅读由E. McKenney所著《Memory Barriers : a Hardware View For Software Hackers》一文的读书笔记 。本文首先介绍了关于cache 一些基本概念。接下来,介绍了cache 一致性协议:MESI (Modified, Exclusive, Shared, Invalidate)。在详细讨论了各个状态之间的 转换及触发该转换的条件后,作者详细介绍了有其带来的在SMP架构下所导致的问题并引入内存屏障 的概念并详细介绍了内存屏障在实际使用过程中的所遇到的种种问题及解决方案。
#1. Cache一致性协议:MESI
由于CPU语句内存之间的访问速度差,现今几乎所有的架构下,为了提高系统的执行效率,我们都会引入 Cache来解决,由于CPU与内存访问之间的速度差所带来的问题。通常做普通的一颗CPU的执行速度就可以达到每纳秒执行十多条指令,但是倘若从内存中读取数据的话则需要少十几纳秒多则几十纳秒。 (1) 现有的当前架构如下:
这里我们将Cache模块画在cpu方块之外,只是为了描述方便,实际中,通常是将Cache系统集成在CPU中,形成所谓的L1 Cache以及L2 Cache或者 L3 Cache等。通常出我们常说的Cache为数据Cache,其主要的作用就是保存CPU访问过的数据,因为依据代码和数据的相邻特性之前访问过的指令和数据将会在不久的将来在次被访问。当然随着当前流水线技术的发展,CPU的多发射架构也越来越成为主流,因此处理上述数据Cache外,还存在着指令Cache,而指令Cache又进一步的提高了CPU的系统主频。为了解决SMP架构下由于由于各个CPU Core所对应的Cache造成的Cache中数据的不一致,我们采用MESI 算法来保存数据的一致性。
Cache miss: 当cpu所需要的数据未在Cache line中存在时,此时如果CPU访问Cache查找该数据时候,即发生 Cache Miss。 也称作:Startup 或者 Warmup Miss。 Capacity Miss: 当当前的Cache Line中的数据已满时 ,如果此时再次发生Cache Miss,则需要将现有的数据由当前的Cache Line中置换出,此时我们就称:Capacity Miss。
MESI中M.E.S.I各自所代表的含有如下:
M(Modified)
该行数据被修改,以和该数据在内存中的映像所不同。最新的数据只存在于Cache中
E(Exclusive)
该行数据有效,且数据与内存中的数据一致,但数据值只存在于本Cache中。通俗来说,该数据只在Cache中独一份
该行数据有效,且该数据与内存中的数据一致。同时,该数据存在与其它多个Cache中
I(Invalid)
该行数据无效
各个状态之间的转换如下所示:
Read消息:read消息中包括了所需要读取的cache line的物理地址。
Read相应消息:该消息中包含了 read消息中所请求的数据。该数据有可能是由内存或者其它cpu中所获得。例如:其它cpu中含有所需要的处于“modified”模式的数据。 cache必须回应一个read相应消息。
invalidate消息:invalidate消息包含需要进行invalidate的cache line的物理地址。 所有的cache必须要将相应的数据从其cache和相应消息中删除。
invalidate应答:当一个cpu接受到一个invalidate消息后,在其完成将相应的数据从其cache中删除后必须给予相应的invalidate应答消息。
read无效:其消息中包含了所需要读取的cache line的物理地址。于此同时,将其相直接关联的cache中的数据删除。 因此,其包含了read和invalidate两重意思。 一个 read invalidate消息需要:一个read相应以及一些列的 invalidate 应答作为其回应。
writeback: 该消息中包含了需要写回到内存的:地址和数据。该消息允许cache强制将其cache line置位modified状态,当其需要较为其它数据腾出相应的空间时。
下面我们就对上述的四种状态给出一个直观的介绍。
(0)初始状态, 初始状态如上述的图二所示。
(1)shared状态,该状态下Cache Line中的数据与Memory中的数据一致,且其数据也存在于其它的CPU Cache Line中。
(2)Modified状态,在该状态下Cache Line中的数据与Memory数据一致,但数据只是存在与本CPU的Cache Line中。
下面我们就来介绍一下MESI转换图中的各个状态并给出详细的分析和介绍。
#2. MESI状态转换详解.
a: 当一个cache line处于M状态,表明该cache line中的数据,因此当将cache line中 的数据回写到内存时候,就由M状态变为 E,表明数据有效,且已经回写到内存中, 但由于为及时的与其它cpu进行数据同步,故而只有在本cpu中存在着该数据。其中 蓝色的点代表修改后的数据。
b: 当cpu想一个处于独享状态的cache line中写入数据时候,由于该cache line处于 独享状态(其表明:该cache line中的数据只在本cpu的cache line中存在),因 此,当处于独享状态下时候,我们无需将数据做其他额外的工作,直接修改数据 即可。
c: 此种状态下,由Modified到invalidate表明,将数据从相应的cache line中删除。 将本地的数据删除。即执行清空数据操作。即:转换由类似于e的状态,到初始 状态0. 各个cpu在接收到read invalidate消息后,各个cpu必须回复read res和 invalidate ACk消息。 发送read invalidate消息是通知所有cpu将其各自本地的 数据给清除掉,在完成本地数据的清除后,发送一个invalidate ack消息,告诉 发起read invalidate消息的主cpu,其它cpu已经完成该项操作。
d: cpu对于一个未在cache line中的数据进行原子的读写操作。此时cache line会由 原来的invaldate 状态,转为Modified状态。首先发送一个read invalidate消息 而后接收到 read相应消息,而该消息中包含有相应的包含所请求的数据。当cpu接收 完所有的 invalidate应答相应后,则完成本次的数据读取。
e: cpu在一个已有数据的cache line上执行原子的读写操作,由于原数据已存在于 cache line中,因此如果对该cache line进行读写操作,首先要使得原有数据由 该cache line中删除,因此发送一个invalidate消息。由于数据同样也存在于其它 cpu的cache line中,因此必须等到所有的cpu均返回 invalidate 应答,方可以认 本次读写操作结束。
f: 当处于Modified状态时候,一个其它cpu发起读数据操作。此时,拥有数据的cpu需要 将该数据发生到其它cpu的cache line中并将数据更新到内存中。该中状态转换,通常是 由一个read消息所发起,当该cpu接收到一个read消息时候,那么该cpu将回复一个read相应 且该相应消息中包含着所请求的数据。
g: 当其他cpu需要从cache line中读取数据时,其是通过其它cpu cache或者内存中 读取相应的数据。无论何种情况,该cpu保存了一份read-only拷贝。本次转换由 cpu接收到一个read消息后发起该请求read 请求。 该cpu收到该消息后,会发送 一个包含所请求数据的 read 响应消息。
h: 当该cpu意识到不仅需要将某些数据写入到该cpu的cache line中时候,其将会发送一个invalidate消息。cpu只有等到所有的cpu都已发送invalidate ack消息后,方可认为完成本次操作,否则的话会导致该cpu 无法知道其他cpu中的数据是否被删除。或者,其他所有的cpu将该cache line从他们的caches中通过使用 writeback消息将其从cache中删除(为了未来可能的数据腾出空间)。因此,该cpu中的数据变为独享数据。此时的状态,cpu0,可以发生数据写入操作,此时会发送一个Invalidate消息给其它所有的cpu,例如:cpu1,cpu1将其cache line中数据删除,并返回invalidate ack消息。 此时,由于其它的cpu中的数据均被删除,故而cpu0中的数据为独享状态。
i: 当其它某些cpu试图在由本cpu cache line中所拥有的数据上执行一个原子的读写操作时候。该 cpu将该数据从本cache line中删除(使用 invalidate消息)。该项转移由该cpu接受到一个read invalidate消息开始,以该cpu响应一个 read 响应消息以及一个invalidate ack消息。因为在mesi 协议中对于一个invalidate消息必须要有一个invalidate ack消息与之相应对于。最后的状态回到(0) 状态。
j: 当cpu保存一个未在其cache line中的数据项时候,其会发送一个read invalidate消 息给其它cpu,且该cpu等待,直到其接收一个 read响应消息和所有cpu返回的invalidate ack消息。该cache line将由(b)状态转为修改状态,当完成实际的数据存储后。
k: cpu读取一个数据,而该数据并不在该cpu的cache line中。cpu将发送一个read消息 且当读取到read 响应消息后,完成本次操作。
l: 当某些cpu执行对在其cache line中的数据存储命令时,但是该其cpu cache line中 的数据是read only状态,因为该cache line中的数据是在其它cpu中,而该cpu cache line中的数据只是其它cpu cache line中的数据的一份拷贝。该次转为由接收到一个invalidate消息开始并返回一个invalidate ack消息。
正是由于多核架构以及指令的乱序执行所带来的数据在不同核直接的数据同步问题,需要我们在使用存在着这样的一种现象:当我们使用内存中某个数据的时候,如果此时执行该指令的核中的数据Cache中的数据与内存中的数据一致的话,此时执行并无问题。但是当在后续的执行过程,由于乱序以及多核,此时该指令运行在另外的一个核之上,而该核中Cache的数据并同步,此时系统将取出旧数据进行执行。这样便导致了程序运行出错误的结果,为了防止这该种情况的发生,在使用某个变量之前,强制的要求各个核进行数据的同步,当数据同步完成后,方可进行后续的执行。因此,引入了内存屏障的概念。当然为了性能的考虑,我们又将内存屏障细分为:读写两种内存屏障操作。
关于作者:
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线}

我要回帖

更多关于 spring cache 失效 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信