目录
并发编程的三大特性
可见性 有序性 原子性
可见性
进程和线程
进程:静态概念,资源分配的最小单位,例如QQ.exe启动之后它就是一个进程,内存会分配一块空间给它。
线程:动态概念,QQ.exe启动后它会从main方法开始运行,main就是一个线程,main也是主线程。线程是资源调度的最小单位。进程里包含线程,所有线程共享所属进程的资源。
计算机组成
CPU在执行线程时并不会直接和内存打交道,因为从内存上读数据往往是很慢的,它会把要用到的数据存储在寄存器(Registers)上,这样访问速度会非常快。ALU是计算单元,PC是程序计数器,由于Registers大小并不大,但是为了条效率我们往往会希望它大一点,解决方案就是个Registers加一些缓存以扩大存储空间。
线程调度
CPU在切换线程时,会将上一个线程的Registers信息和PC信息缓存到一个cache中,之后再切换为另一个线程。切换回去就会从cache中再把原来线程的信息拿回来,反复地恢复现场。
一个程序中线程数并不是越多越好,线程在切换时很消耗CPU资源,如果线程太多,CPU会把精力投入到切换线程中,从而降低了程序执行速度。
单核CPU未经过超线程处理时,执行多线程程序有没有意义?
有,即便是只有单核CPU,在一些比较耗时的操作例如等待网络响应,等待IO等操作时,CPU也是处于待机阶段,如果在这段时间里,有其他线程可以把这个空闲时间利用起来,CPU的利用效率是特别高的,会比单线程执行更快。
超线程
一个CPU中的ALU对应多个Registers和PC。
CPU缓存机制
CPU访问内存非常慢,CPU的运行速度和访问内存的速度比为:1:100。