为什么要指令重排

一条指令的执行步骤
  1. 取指 IF
  2. 译码和取寄存器操作 ID
  3. 执行或者有效地址计算 EX
  4. 存储器访问 MEM
  5. 写回 WB

在CPU工作中汇编指令分多步完成,每一部涉及到的硬件可能不同,于是有了流水线技术来执行指令。
没有流水线技术前,如果同时两个指令过来执行 一个需要5秒,那么两个就需要10秒;有了流水线技术之后,可能就只要6秒。多个指令同时执行时性能显著提升。
这个和指令重排有啥关系?
因为流水线满载后一旦中断,所有的硬件设备会进入一个停顿期,再次满载,需要几个周期,对性能损失比较大。指令重排就是一种减少流水线中断的技术。
流水线技术并不是说让多个指令并行执行,可能还是需要等他其他指令执行完才可以执行,那么这个时候等待就有一个停顿,我们可以让和这个指令后面不相干的指令继续执行,这就是指令重排。
指令重排有可能带来一个问题——乱序
乱序也必须保证程序上下文的因果关系不发生改变,如果无法保证,那么就应该遵守hapen-before原则,不能指令重排。
以上谨代表个人思考

参考文档
  1. Java高并发程序设计(葛一鸣,郭超)

你可能感兴趣的:(Java,java)