专业术语:缓存
比较并交换(Compare And Swap): CAS操做须要两个数值,一个旧值(指望值),一个新值,在操做期间,先比较旧值有没有发生变化,若是旧值没有发生变化,则将新值与旧值进行替换jvm
缓存行(Cache Line):话黁的最小操做单位ide
CPU流水线(CPU pipeline):CPU流水线的操做方式就像工业生产上的装配流水线,在CPU中由五到六个不一样功能的电路单元组成一条指令处理流水线,而后将一条X86指令分红5~6步再由这些指令单元分别执行,这样就能实现一个CPU时钟周期完成一条指令,所以提升cpu的执行速率对象
内存顺序冲突(Memory order violation):内存顺序冲突通常是由假共享引发的,假共享是指多个CPU同时修改同一个缓存行的不一样部分而引发其中一个cpu的操做无效,当出现这个内存顺序冲突时,cpu必须清空流水线blog
总线锁保证原子性ip
使用处理器提供的一个LOCK指令信号,当一个处理器在总线上输出此信号时,其余处理器的请求将被阻塞,那么该处理器就能够独占共享区内存
使用缓存锁保证原子性:资源
内存区域若是被缓存在处理器的缓存行中,而且在lock操做期间被锁定,那么当他执行锁操做回写到内存时,处理器不在总线上声言lock信号,而是修改内部的内存地址,并容许他的缓存一致性机制来保证操做的原子性,由于缓存一致性机会会阻止同时修改两个以上处理器缓存的内存区域数据,当其余处理器回写已被锁定的缓存行数据时,会使缓存行无效it
有两种状况不会触发缓存锁的:pip
1)、操做数不能被缓存在处理器内部或操做数跨多个缓存行,处理器会调用总线锁定
2)、处理器不支持缓存锁定(intel 486,pentium处理器)
CAS操做的三大问题:
1、ABA问题
2、循环时间长,开销大:当CAS长时间不成功时,会给cpu带来很是大的开销,致使cpu使用率飙高,若是jvm支持处理器提供的pause指令,那么执行效率会有必定的提高。pause指令有两个做用,(一)、延迟流水线的执行指令(de-pipeline),使cpu不会消耗太多的执行资源,延迟的时间取决于具体的实现版本,有的版本延迟为0.(二)、能够避免在退出循环的时候因内存顺序冲突而引发的cpu流水线清空,从而提升执行效率。
3、只能保证一个共享变量的原子性:能够把多个变量放在同一个对象里