01.并发编程中可见性、原子性、有序性问题
2019-04-15 11:25
288 查看
并发编程幕后的故事
这些年,我们的cpu、内存、I/O设备都在不断迭代,不断朝着更快的方向努力。但是,在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异。CPU和内存的速度差异可以形象地描述为:CPU是天上一天,内存是地上一年(假设CPU执行一条普通指令需要一天,那么CPU读写内存得等待一年的时间)。内存和I/O设备的速度差异就更大了,内存是天上一天,I/O设备是地上十年。
程序里大部分语句都要访问内存,有些还需要访问I/O,根据木桶原理(一只木桶内装多少水取决于它最短的那块木板),程序整体的性能取决于最慢的操作,--读写I/O设备,也就是说单方面提高CPU性能是无效的。
为了合理利用CPU性能,平衡这三者的差异,计算机体系机构、操作系统、编译程序都做出了贡献,主要体现为:
- CPU增加了缓存,以均衡与内存的速度差异
- 操作系统增加了进程、线程,以时分复用CPU,进而均衡CPU与I/O设备的速度差异
- 编译程序优化指令执行次序,使得缓存能够得到更加合理地应用
现在我们几乎所有的程序都默默的享受这些成果,但是天下没有免费的午餐,并发程序很多诡异问题的根源也在这里。
源头之一:缓存导致的可见性问题
源头之二:线程切换带来的原子性问题
根源之三:编译优化带来的有序性问题
相关文章推荐
- 01-可见性、原子性和有序性问题:并发编程Bug的源头
- 聊聊高并发(十九)理解并发编程的几种"性" -- 可见性,有序性,原子性
- 聊聊高并发(十九)理解并发编程的几种"性" -- 可见性,有序性,原子性
- Java并发12:并发三特性-原子性、可见性和有序性概述及问题示例
- 多线程学习四:并发编程中的原子性、可见性、有序性
- 理解并发编程的几种"性" -- 可见性,有序性,原子性 http://blog.sina.com.cn/s/blog_4adc4b090102whzx.html
- 5、并发编程的3个概念:原子性、可见性、有序性
- java并发编程--原子性、可见性、有序性
- 并发编程(原子性、可见性、一致性)
- 并发编程——原子性,可见性和有序性
- 并发研究之可见性、有序性、原子性
- 并发1--原子性、可见性、有序性
- Java多线程总结(5)— 原子性、可见性、有序性和并发库的原子性操作
- 死磕Java并发(三) 可见性、原子性和有序性
- java并发特性:原子性、可见性、有序性
- java 并发概念与内存分析,原子性、可见性、有序性
- 并发编程的三大概念:原子性,有序性,可见性
- 【读书笔记】并发编程需要注意的几个典型问题
- 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性
- java并发特性,原子性、有序性、可见性