益阳网站制作公司,上海注册公司代理电话,网站做好了每年都要续费吗,个人网站类型什么是可见性问题#xff1f;
Further Reading #xff1a;什么是可见性问题#xff1f; 缓存一致性 内存一致性 内存可见性 顺序一致性区别 CPU缓存一致性问题
由于CPU缓存的出现#xff0c;很好地解决了处理器与内存速度之间的矛盾#xff0c;极大地提高了CPU的吞吐能…什么是可见性问题
Further Reading 什么是可见性问题 缓存一致性 内存一致性 内存可见性 顺序一致性区别 CPU缓存一致性问题
由于CPU缓存的出现很好地解决了处理器与内存速度之间的矛盾极大地提高了CPU的吞吐能力但是也为计算机系统带来更高的复杂度它引入了一个新的问题 缓存一致性Cache Coherence 。
比如多路处理器系统中 i 这个操作在程序的运行过程中首先需要将主内存中的数据复制一份存放到CPU Cache中那么CPU寄存器在进行数值计算的时候就直接到Cache中读取和写入当整个过程运算结束之后再将Cache中的数据刷新到主存当中。 具体过程如下。 1读取主内存的i到CPU Cache中。 2对i进行加一操作。 3将结果写回到CPU Cache中。 4将数据刷新到主内存中。 i在单线程的情况下不会出现任何问题但是在多线程的情况下就会有问题。
每个线程都有自己的工作内存本地内存对应于CPU中的Cache变量i会在多个线程的本地内存中都存在一个副本。如果同时有两个线程执行i操作假设i的初始值为0每一个线程都从主内存中获取i的值存入CPU Cache中然后经过计算再写入主内存中很有可能i在经过了两次自增之后结果还是1这就是 典型的缓存不一致性问题。 PS多路处理器系统每个处理器都有自己的高速缓存而它们又共享同一主内存Main Memory这种系统称为共享内存多核系统Shared Memory Multiprocessors System -----------------------------------------------------------------------------读书笔记摘自 书名深入理解Java虚拟机JVM高级特性与最佳实践第3版作者周志明 为了解决缓存不一致性问题通常主流的解决方法有如下两种。
1、通过 总线加锁 的方式
第一种方式常见于早期的CPU当中而且是一种悲观的实现方式从而使得只有一个CPU抢到总线锁能够访问这个变量的内存。这种方式效率低下所以就有了第二种通过缓存一致性协议的方式来解决不一致的问题。 Further Reading 处理器总线的工作机制
2、通过 缓存一致性协议的方式
在缓存一致性协议中最为出名的是Intel的 MESI 协议MESI协议保证了每一个缓存中使用的共享变量副本都是一致的。它的大致思想是 当CPU在操作Cache中的数据时如果发现该变量是一个共享变量那么进行如下操作 1、读取操作不做任何处理只是将Cache中的数据读取到寄存器。 2、写入操作发出信号通知其他CPU将该变量的Cache line置为无效状态其他CPU在进行该变量读取的时候不得不到主内存中再次获取。 协议是规则光说不做MESI就是它的一个实现 -----------------------------------------------------------------------------读书笔记摘自 书名Java高并发编程详解多线程与架构设计 作者汪文君