引言
CPU缓存与内存产生的一致性问题(可见性)
CPU时间片切换产生的原子性问题
CPU指令编译优化产生的有序性问题
并发编程问题的根源
CPU、内存、I/O设备三者速度差异一直是 核心矛盾 三者速度差异
可形象描述为:天上一天(CPU),地上一年(内存),地下十年(I/O) 根据木桶理论,程序整体性能取决于最慢的操作-读写I/O设备,可见单方面提高CPU性能是无效的。
为了合理利用CPU的高性能,平衡三者的速度差异,计算机体系结构、操作系统、编译程序都做了努力:
- CPU增加了缓存,以均衡与内存的速度差异
- 操作系统增加了进程、线程,以及分时复用CPU,进而均衡CPU与I/O设备的速度差异
- 编译程序优化指令执行次序,使得缓存能够得到更加合理的利用
1.1 源头之一:缓存导致的可见性问题
什么是可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到。
但是多核时代,每颗 CPU 都有自己的缓存, CPU 缓存与内存的数据一致性就没那么容易解决了
private int count = 0;@Testpublic void testDemoAdd() throws InterruptedException {Thread thread01 = new T