java并发编程之基础与原理2

cpu缓存结构剖析

java并发编程之基础与原理2_第1张图片

 下面说一下概念与作用

CPU缓存即高速缓冲存储器,是位于CPU与主内存间的一种容量较小但速度很高的存储
器。由于CPU的速度远高于主内存,CPU直接从内存中存取数据要等待一定时间周期,Cache中
保存着CPU刚用过或循环使用的一部分数据,当CPU再次使用该部分数据时可从Cache中直接调
用,减少CPU的等待时间,提高了系统的效率。

计算机在程序执行过程中有两种局部性原理:1.时间局部性和2.空间局部性

java并发编程之基础与原理2_第2张图片

cpu的缓存分类

缓存一般分为了三级缓存:

java并发编程之基础与原理2_第3张图片

 java并发编程之基础与原理2_第4张图片

 下面看一下多cpu的多核缓存架构

java并发编程之基础与原理2_第5张图片

上面l1缓存有两个,一个缓存指令,一个用来缓存数据  

 cpu的缓存访问延迟

java并发编程之基础与原理2_第6张图片

主内存访问延迟的时钟周期是167个,然后l1缓存最小,是4个

我们可以这样来进行一个计算

java并发编程之基础与原理2_第7张图片

 下面说一下缓存一致性的问题

 java并发编程之基础与原理2_第8张图片

 下面说一下窥探协议类型

java并发编程之基础与原理2_第9张图片

 下面说一下MESI协议:

java并发编程之基础与原理2_第10张图片

        java并发编程之基础与原理2_第11张图片

 如何解决原子性问题

 先来说一个总线的仲裁机制

在计算机中,数据通过总线在处理器和内存之间传递。每次处理器和内存之间的数据传递都
是通过一系列步骤来完成的,这一系列步骤称之为总线事务(Bus Transaction)

总线会同步试图并发使用总线的事务。在一个处理器执行总线事务期间,总线会
禁止其他的处理器和I/O设备执行内存的读/写

java并发编程之基础与原理2_第12张图片

假设处理器A,B和C同时向总线发起总线事务,这时总线仲裁(Bus Arbitration)会对竞
争做出裁决,这里假设总线在仲裁后判定处理器A在竞争中获胜(总线仲裁会确保所有处理器都
能公平的访问内存)。此时处理器A继续它的总线事务,而其他两个处理器则要等待处理器A的
总线事务完成后才能再次执行内存访问。假设在处理器A执行总线事务期间(不管这个总线事务
是读事务还是写事务),处理器D向总线发起了总线事务,此时处理器D的请求会被总线禁止。
总线的这种工作机制可以把所有处理器对内存的访问以串行化的方式来执行。在任意时间
点,最多只能有一个处理器可以访问内存。这个特性确保了单个总线事务之中的内存读/写操作
具有原子性。
原子操作是指不可被中断的一个或者一组操作。处理器会自动保证基本的内存操作

两个方法保证了锁定

就是总线锁定与缓存锁定

伪共享的问题

 java并发编程之基础与原理2_第13张图片

java并发编程之基础与原理2_第14张图片 java并发编程之基础与原理2_第15张图片

java并发编程之基础与原理2_第16张图片

java并发编程之基础与原理2_第17张图片

 下面讲解两个原则

java并发编程之基础与原理2_第18张图片

 java并发编程之基础与原理2_第19张图片

 java并发编程之基础与原理2_第20张图片

 

 java并发编程之基础与原理2_第21张图片

 java并发编程之基础与原理2_第22张图片

java并发编程之基础与原理2_第23张图片

你可能感兴趣的:(并发编程,java,开发语言)