深入JVM 硬件的效率与一致性

让计算机并发执行若干个运算任务与更充分利用计算机的效能之间的因果关系,看似顺理成章,实际它们之间关系远远没有想象的简单,其中一个重要的复杂性来源于绝大多数的运算任务不可能单靠 处理器计算完成,那么处理器与内存的交互,如读取运算数据,存储运算结果,类似的IO操作是很难消除的(无法仅仅依靠寄存器完成所有计算任务)

由于计算机的存储设备与处理器之间的速度代沟,所以现代计算机系统不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存Cache来作为内存与处理器的缓冲:将运算需要使用的数据复制到缓存,让运算速度能更快执行,当运算结束后再从缓存刷新到内存中,这样可以一定的提高处理器的效率,避免长时间的缓慢等待内存读写

基于高速缓存的存储交互很好的解决了处理器与内存之间的速度矛盾,但也为计算机系统带来更高的复杂性,因为引入了新的问题:缓存一致性 。在多处理器系统中,每个处理器配备有各自的高速缓存,而他们又共享同一主内存。

当多个处理器运算任务设计同一块主内存区域时,将可能导致缓存数据不一致性,如果发生这种情况,那同步回内存的数据采用谁的,因此,为了确保数据一致性,必须遵循缓存一致性协议,如MSI MESI 等,而内存模型,可以理解为 在特定的操作协议下,对特定的内存或高速缓存进行读写的抽象,不同的架构机器有不同的内存模型

除了高速缓存外,为了使得处理器内部运算单元被合理执行,处理器会对代码进行乱序执行优化,即在保证执行结果一致的情况下,调整程序语句的执行顺序,如Java虚拟机的即时编译器的指令重排序

猜你喜欢

转载自blog.csdn.net/qq_33369979/article/details/88537044
今日推荐