分布式内参3:微观一致性问题:内存可见性和寄存器可见性
备注:本内参系列,是学习
TinyMQ
项目之前的必读内容!
数据在哪里存在呢?只在内存吗?不是的。数据在内存中存在,但是当用的时候会加载到CPU的寄存器里面。内存和寄存器是两个地方,从而出现了新的名词:内存可见性和寄存器可见性。
为什么叫内存可见性呢?感觉很奇怪的名字。其实,明白以下道理就不奇怪了。数据的流动过程是:内存->寄存器->计算器
很多时候,数据从内存地址读取到寄存器里面,后面的计算过程中CPU就一直使用寄存器里面的值,即是内存地址上的值发生变化,CPU也不知道,CPU此时就是井底之蛙,而变量此时可以称为:寄存器可见性。
但是当变量被volatile修饰之后,CPU就不再偷懒,只要用到数据,它都会越过寄存器,直接从内存中读取,然后再在计算器中计算,最后返回给内存,这个时候变量就不在寄存器里面停留,就当寄存器不存在一样,这就称为内存可见性。