您的位置:首页 > 编程语言

01.并发编程中可见性、原子性、有序性问题

2019-04-15 11:25 288 查看

并发编程幕后的故事

       这些年,我们的cpu、内存、I/O设备都在不断迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异。CPU和内存的速度差异可以形象地描述为:CPU是天上一天,内存是地上一年(假设CPU执行一条普通指令需要一天,那么CPU读写内存得等待一年的时间)。内存和I/O设备的速度差异就更大了,内存是天上一天,I/O设备是地上十年。

        程序里大部分语句都要访问内存,有些还需要访问I/O,根据木桶原理(一只木桶内装多少水取决于它最短的那块木板),程序整体的性能取决于最慢的操作,--读写I/O设备,也就是说单方面提高CPU性能是无效的。

       为了合理利用CPU性能,平衡这三者的差异,计算机体系机构、操作系统、编译程序都做出了贡献,主要体现为:

  1. CPU增加了缓存,以均衡与内存的速度差异
  2. 操作系统增加了进程、线程,以时分复用CPU,进而均衡CPU与I/O设备的速度差异
  3. 编译程序优化指令执行次序,使得缓存能够得到更加合理地应用

     现在我们几乎所有的程序都默默的享受这些成果,但是天下没有免费的午餐,并发程序很多诡异问题的根源也在这里。

源头之一:缓存导致的可见性问题

源头之二:线程切换带来的原子性问题

根源之三:编译优化带来的有序性问题

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: