当前位置: 首页 > news >正文

建设项目环保验收平台网站百度百家官网入口

建设项目环保验收平台网站,百度百家官网入口,贵港网站建设兼职,帮人家做家务的网站文章目录CPU缓存架构Disruptor内存队列CPU缓存架构介绍缓存一致性问题缓存一致性协议MESI协议伪共享问题高性能内存队列DisruptorCPU缓存架构Disruptor内存队列 CPU缓存架构 介绍 cpu与内存的交互数据之间,有一个高速缓存层。有些处理器有3层缓冲,有些…

文章目录

  • CPU缓存架构+Disruptor内存队列
    • CPU缓存架构
      • 介绍
      • 缓存一致性问题
      • 缓存一致性协议
      • MESI协议
      • 伪共享问题
    • 高性能内存队列Disruptor

CPU缓存架构+Disruptor内存队列

CPU缓存架构

介绍

cpu与内存的交互数据之间,有一个高速缓存层。有些处理器有3层缓冲,有些处理器有4层缓存

当下CPU都是有多核,每核cpu都有一份自己的高速缓存

内存中的数据读取到高速缓存中每次读取的数据至少是一次缓存行64字节

在这里插入图片描述



缓存一致性问题

多个cpu将数据赋值到高速缓存中,再进行更新操作,先是修改的缓存中的数据,然后在刷新回主内存,那么此时就有缓存一致性问题。

多个cpu缓存中的数据与主存中不一致,如果都直接刷新回主内存那么就肯定会出现丢失更新的问题。

解决缓存一致性问题的方案:

  • CAS原子指令
  • 总线锁定。上图中数据的传输是使用总线,直接给总线加一把锁。这种方式对性能较低
  • 缓存锁定。利用缓存一致性协议实现


缓存一致性协议

缓存一致性协议是一种用于确保处理器缓存中的数据和主存中的数据一致的机制。它的实现是基于总线窥探实现的

总线窥探

总线窥探是缓存中的一致性控制器监视总线事务的一种方案。在计算机中,数据通过总线在处理器和内存之间传递。每次处理器和内存之间的数据传递都是通过一系列步骤来完成的,这一系列步骤称之为总线事务

总线窥探的协议类型有两种:写失效、写更新


工作原理

当特定数据被多个缓存共享时,处理器修改了共享数据的值,更改必须传播到所有其他具有该数据副本的缓存中。这种更改传播可以防止系统违反缓存一致性。


协议

缓存一致性协议在多处理器系统中应用于高速缓存一致性。为了保持一致性,人们设计了各种模型和协议,如MSI、MESI(又名Illinois)、MOSI、MOESI、MERSI、MESIF、write-once、Synapse、Berkeley、Firefly和Dragon协议。



MESI协议

MESI协议是一个基于写失效的缓存一致性协议,是支持回写(write-back)缓存的最常用协议。

它又四种状态:

  • M 已修改(Modified)

    缓存行是脏的(dirty),与主存的值不同。如果别的CPU内核要读主存这块数据,该缓存行必须回写到主存,状态变为共享(S).

  • E 独占(Exclusive)

    缓存行只在当前缓存中,但是干净的——缓存数据同于主存数据。当别的缓存读取它时,状态变为共享;当前写数据时,变为已修改状态。

  • S 共享(Shared)

    缓存行也存在于其它缓存中且是未修改的。缓存行可以在任意时刻抛弃。

  • I 无效(invalid)

    缓存行是无效的


处理器要访问一个数据先去缓存中找,如果没找到就去主存中找,拷贝一份数据副本到高速缓存中,此时该数据只有这一个处理器使用,是独占E

之后有有处理器使用了这个数据,会触发缓存到缓存的复制,目的是减少对内存的访问提高性能,现在两个处理器的缓存中数据的状态是共享S

处理器1修改了这个数据,处理器1中的数据状态就变为了已修改M,其他处理器该数据就变为了无效I



伪共享问题

使用了缓存一致性协议,那么就需要考虑伪共享问题。

伪共享问题的在一个缓存行中存在多个变量的数据,可能处理器1操作的是x,处理器2操作的是y。但是处理器1先修改 再将处理器2的缓存行置于无效,那么处理器2就又需要重新读取一份数据到缓存中。

解决伪共享问题常见的方法就是缓存行填充。就比如我们创建一个类实例,分配的是一块连续的内存空间,其中多个连续的成员变量就很有可能是在一个缓存行中

  • 缓存行填充

    class Pointer {volatile long x;//避免伪共享: 缓存行填充,将x和y分开,中间插入几个无用的成员变量long p1, p2, p3, p4, p5, p6, p7;volatile long y;
    }
    
  • 使用 @sun.misc.Contended 注解(java8)

    注意需要配置jvm参数:-XX:-RestrictContended

    class Pointer {// 避免伪共享: @Contended +  jvm参数:-XX:-RestrictContended  jdk8支持//@Contendedvolatile long x;volatile long y;
    }
    
  • 使用ThreadLocal



高性能内存队列Disruptor

JUC包下的阻塞队列有以下几个缺点:

  • 大部分采用ReentrantLock锁,加锁通常比较影响性能
  • 如果对队列使用数组的数据结构,那么又有伪共享问题

而Disruptor的高效体现到以下几个方面:

  • 属性填充,避免了位共享
  • 无锁,全采用的CAS方式
  • 使用的环形数组,计算数组存放下标
  • 基于事件驱动的生产者消费者模型(观察者模式)
http://www.mmbaike.com/news/83596.html

相关文章:

  • 甘肃最新消息网络排名优化软件
  • 网络设计报告提纲范文seo 培训教程
  • 国家住房和城乡建设厅网站首页seo外链招聘
  • 外贸都是在哪些网站做搜狗网址大全
  • 做婚礼邀请函网站旺道seo优化
  • 山东网站营销seo哪家好搜索引擎营销的主要方式有
  • 温州做网站哪家比较好陕西优化疫情防控措施
  • 网络维护网站建设培训网络营销平台推广方案
  • 芒市网站建设域名备案查询系统
  • 做的网站上更改内容改怎么回事长沙seo优化价格
  • 四川网站建设 lkcmsseo专业培训需要多久
  • 大连网站推广优化网络安全
  • 海口智能建站价格西安百度seo
  • 网站注册后能不能注销潍坊网站外包
  • 网站报价表对比表怎么做如何查询网站收录情况
  • 网站涉及敏感视频等该怎么做福州360手机端seo
  • 网站建设公司注册百度极速版免费下载安装
  • 少儿编程加盟店8快速优化系统
  • 成都网站建设推广seo推广怎么做
  • 网站备案 个人组网方案兰州seo快速优化报价
  • 平面设计招聘58同城网页seo搜索引擎优化
  • 餐饮系统的网站应该怎么做广州google推广
  • 交流做病理切片的网站百度联盟个人怎么接广告
  • 网站自己推广怎么做北京seo优化推广
  • 廊坊网站建设推广鄞州seo整站优化服务
  • 做游戏模板下载网站有哪些无锡seo关键词排名
  • 海口网站建设哪家最好广州seo公司哪个比较好
  • 广州市城市建设档案馆网站上海网站seo招聘
  • 做网站应该了解什么软件上海网站优化
  • 深圳商城网站建设十大最靠谱教育培训机构