首页 > 其他分享 >MESI缓存一致性协议以及Volatile

MESI缓存一致性协议以及Volatile

时间:2023-10-18 10:45:53浏览次数:31  
标签:缓存 Invalid MESI Volatile 处理器 一致性

MESI(Modified, Exclusive, Shared, Invalid)是一种缓存一致性协议,用于解决多处理器系统中,多个处理器对同一块内存的并发读写可能导致的数据不一致性问题。MESI协议维护了每个缓存行的四种状态:

  1. Modified(M): 表示缓存行已被修改,并且是唯一的拷贝。当其他处理器需要读取该数据时,必须先将它的缓存行设置为Invalid状态,然后从当前处理器的缓存中拷贝数据。

  2. Exclusive(E): 表示缓存行是唯一的拷贝,并且未被修改。其他处理器可以读取这个数据,但必须先将它的缓存行设置为Shared状态,然后从当前处理器的缓存中拷贝数据。

  3. Shared(S): 表示缓存行是共享的,即有其他处理器也有相同的拷贝。其他处理器可以读取这个数据,但不能修改。如果当前处理器要修改这个数据,必须将缓存行状态变为Modified,然后其他处理器的缓存行变为Invalid。

  4. Invalid(I): 表示缓存行无效,即不包含有效的数据。当一个处理器写入该数据时,必须将其他处理器的缓存行状态变为Invalid。

Volatile关键字与MESI协议的关系在于,Volatile关键字可以保证变量的可见性,即当一个线程修改了一个volatile变量,其他线程能够立即看到这个变化。在多处理器系统中,Volatile关键字的实现通常依赖于底层的缓存一致性协议,例如MESI。当一个线程写入一个volatile变量时,底层的缓存一致性协议会确保其他处理器的缓存无效,从而保证其他线程读取这个volatile变量时,能够看到最新的值。

MESI协议的作用是在多处理器系统中维护缓存的一致性,确保多个处理器对同一块内存的并发读写操作能够正确同步,避免数据不一致性。Volatile关键字在Java中用于确保变量的可见性,它的实现通常依赖于底层硬件的缓存一致性协议,例如MESI。

标签:缓存,Invalid,MESI,Volatile,处理器,一致性
From: https://www.cnblogs.com/leon2019/p/17771501.html

相关文章

  • keep-alive实现tab标签页缓存
    标签页缓存 实现效果:已经打开的tab页签,再次访问不重新加载;关闭tab页签后再次访问,则重新加载实现技术:keep-alive组件的include属性指定页面缓存 一、修改Main.vue1、代码:<keep-alive  :include="cachPage">   <router-view></router-view></keep-alive> ......
  • mybatis、mybatis-plus的二级缓存使用
    需求因有些数据查询量很大,很费数据库资源,且每次查询都是不怎么变更的数据,所以需要通过缓存进行减轻数据库压力,继而选择通过myabtis的二级缓存来实现。使用步棸第一步:yml配置需开启mybatis-plus的二级缓存。#MyBatisPlus的配置项mybatis-plus:configuration:#是否......
  • C#内存缓存链表BytesListBuffer
    C#自带MemoryStream,可以作为内存缓存使用,用来存储byte[]数据,但是MemoryStream的扩展机制是通过获取整块连续内存来缓存数据,当需要缓存较大数据时,虽然空闲内存可能足够,但是可能找不到足够大的整块连续内存而导致扩展失败产生outofmemory的异常。另外,对于很多缓存场景,重新分配整块......
  • Redis缓存系统常见问题及解决方案
    首先了解以下Redis缓存机制Redis缓存基于内存,查询时先进入Redis缓存,如若查询不到,则进入MySQL数据库查询信息。数据库取到则更新缓存并返回结果,否则返回空。   缓存穿透问题什么是缓存穿透当用户在Redis缓存系统执行一条无效查询时,这条无效查询将穿透Redis缓存系......
  • java——redis随笔——实战——商户查询缓存
                      把key做了下代码优化: /***根据id查询商铺信息*@paramid商铺id*@return商铺详情数据*/@OverridepublicResultqueryById(Longid){//key要唯......
  • springboot启动时缓存数据
    一、Emos系统的常量数据在sys_config数据表中保存了Emos系统的常量配置信息,其中就包括了考勤部分的常量信息。例如每天上班考勤从几点开始,截止到几点。下班考勤从几点开始,几点结束。 因为这些常量信息跟考勤模块息息相关,所以我们要编写Java代码,在SpringBoot项目启动的......
  • Mybatis之缓存
    缓存简介引入:查询数据:需要连接数据库--好资源解决:把第一次查询的结果放到一个地方,再次查询时直接在这个地方访问就可以(内存--缓存),不需要在访问数据库什么是缓存?存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库查询文件)查询......
  • 如何保证缓存与数据库双写时的数据一致性
    1、背景在做系统优化时,想到了将数据进行分级存储的思路。因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息。基本上配置了很久才会变一次。而有一些数据实时性要求非常高,比如订单和流水的数据。所以这里根据数据要求实时性不同将数据分为三级。第1级:订单数据和......
  • 第四节:Redis数据持久化机制(备份恢复)、缓存淘汰策略、主从同步原理、常见规范与优化
    一.数据持久化 1. 含义Redis提供了RDB和AOF两种持久化方式,默认开启的是RDB,如果需要AOF,需要手动修改配置文件进行开启。RDB:是一种对Redis存在内存中的数据周期性的持久化机制,将内存中的数据以快照的形式硬盘,实质上是fork了一个子进程在执行数据存储,采用的是二进制压......
  • 黑群晖配置缓存,为NAS加速
    不啰嗦直接上操作         ......