1.根本原因“CPU、内存、磁盘的速度差异”CPU为了同时执行多个任务,开发了时间片旋转,多核和其他CPU。读取内存中的数据太慢,所以给自己设置了一个缓存。CPU读磁盘比较慢,所以我可以让线程阻塞。2、直接原因是缓存带来的可见性问题。CPU将要处理的数据加载到自己的缓存中。处理完后放回自己的缓存中。如果另一个CPU做同样的处理,可能看不到前一个CPU处理的结果。线程切换导致的原子性问题程序中的一行代码往往不是一条CPU指令。当一个线程被切换时,它可能会在代码执行的中间被切换。编译优化优化带来的排序问题会重新排列代码指令,以便更高效地使用CPU缓存。这种重排的过程会导致代码看似没问题,在多线程中出现逻辑问题。3、为什么会遇到这些问题为了提高程序的性能,引入了一个新的方法,必须处理这个方法相应的问题。可以说硬件工程师和操作系统工程师为了提高执行效率给软件工程师带来了麻烦。Next的几篇文章。下面将介绍如何解决上述“可见性、原子性和秩序”的问题。
