版权声明:本文为博主原创文章,未经博主允许不得转载https://blog.csdn.net/martin_ke/article/details/88783367
并发编程,学起来很乱,很有可能是没有形成一个知识体系,在我看来学习技术知识应该有纵横两个维度。横向,去对比技术的发展,就比如我们的CPU有单核的发展到多核的,实现了真正意义上的并发,那么产生怎么样的问题呢?又是怎么去解决的呢?纵向就是去一层一层剥悉技术的实现原理,比如我们用synchronized去解决原子性问题,为什么synchronized可以解决原子性问题呢?
那么我们的故事就从CPU和线程的发展历程开始吧。
早期我们的CPU,并不会存储指令,当我们在输入指令的时候,CPU是处于等待状态的。这样是没有充分利用到资源。
随着发展,就出现了批处理,我们先把一连串的指令写到磁带上,然后计算器自己去执行并回写结果。
截止到这里,我们的CPU处理方式仍然是以串行的方式去处理的。这样子会有一个问题,就是下一个指令永远要等上一个指令执行完才能执行,那么如果某一个指令在执行的过程中,在做一些操作的时候阻塞了,那么其他的后续指令都只能等待着,导致CPU也一直空闲着。
那么,人们就想,当某一个指令阻塞了的话,那就让空闲的CPU去执行其他的指令。那么在单核CPU的时代,其实就是CPU的时间片不断切换。(在这个过程中,基于各个进程之间互不干扰和当CPU再次切换回来的时候,知道从哪里开始执行的考虑,进程就被设计出来了。)但是,这其实是一种伪并发,因为并不是