动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

实例论证Java多线程的有序性

06-01 16:20 699浏览
举报 T字号
  • 大字
  • 中字
  • 小字

有序性(Ordering)是指在什么情况下一个处理器上运行的一个线程所执行的 内存访问操作在另外一个处理器运行的其他线程看来是乱序的(Out of Order)。乱序是指内存访问操作的顺序看起来发生了变化。有序性是Java多线程编程的3大特性之一,下面我们就来通过一个生动的例子来简单论证Java多线程的有序性。

在计算机体系结构中,为了提高执行部件的处理速度,经常在部件中采用流水线技术。所谓流水线技术,是指将一个重复的时序过程,分解成若干个子过程,而每一个子过程都可有效地在其专用功能段上与其他子过程同时执行。

以 DLX 指令集结构为例,一条指令的执行简单说可以分为以下几个步骤:

  1. 取指令(IF)
  2. 指令译码/读寄存器(ID)
  3. 执行/有效地址计算(EX)
  4. 存储器访问/分支完成(MEM)
  5. 写回(WB)

每一个步骤都可能使用不同的硬件完成。

由上图所示,如果没有指令流水线,指令2 需要等待指令1 完全执行完成后执行。假设每一个步骤(子过程)需要花费 1 个 CPU 时钟周期,则指令2 需要等待 5 个时钟周期。而使用指令流水线后,指令2 只需等待 1 个时钟周期就可以开始执行。指令2 开始执行时,指令1 根本还没开始执行,仅仅完成了取指操作而已。这仅仅是 DLX 指令集结构的流水线,实际商用 CPU 的流水线级别甚至可以达到 10 级以上,性能提升可谓是非常明显。

由于流水线技术的引入,不得不面对流水线的三种类型的相关:结构相关、数据相关、控制相关。

  1. 结构相关:当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时将产生“结构相关”。
  2. 数据相关:当一条指令需要用到前面指令的执行结果,而这些指令均在流水线中重叠执行时,就可能引起“数据相关”。
  3. 控制相关:当流水线遇到分支指令和其他会改变 PC 值的指令时就会发生“控制相关”。

一旦流水线中出现相关,指令在流失线中的执行就会出现问题,消除相关的最基本方法是让流水线中的某些指令暂停执行。一旦暂停,所有硬件设备都会进入一个停顿周期,直接影响是性能的下降。我们说的指令重排序就是在产生数据相关时替代流水线暂停的重要方法。指令重排序仅仅是减少流水线暂停技术的一种,在 CPU 设计中还有很多其他软硬件技术来防止流水线暂停。虽然指令重排序会导致有序性问题,但指令重排序对性能的提高有非常重大的意义。

0人推荐
共同学习,写下你的评论
0条评论
代码小兵124
程序员代码小兵124

99篇文章贡献336699字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消