1 Matching Annotations
  1. Jun 2023
    1. 但在多线程的极端情况下,还是会产生缓存数据不一致的情况的。比如上述实例中,CPU-0修改数据,发消息给其他CPU,其他CPU消息队列接收成功并返回。这时CPU-1正忙着处理其他业务,没来得及处理消息队列,而CPU-1处理的业务中恰好又用到了变量a,此时就会造成读取到的a值为旧值。 这种因为CPU缓存优化导致后面的指令无法感知到前面指令的执行结果,看起来就像指令之间的执行顺序错乱了一样,对于这种现象我们俗称“CPU乱序执行”。

      指令乱序的另一种解释; 之前一直认为的是,jvm 编译时优化导致了指令乱序; 此观点认为实际上没有乱序,是因为CPU缓存没来得及更新导致的,看起来像乱序执行 两种观点待后续查证,可能两种都有关

      指令重排跟两个方面都有关系, 编译器的优化 CPU 缓存失效队列的延迟 b站