个人不认为在深入理解OS层面的线程,进程,I/O, 内存等技术之前你能够真的掌握好面向某门特定语言的多线程技术。

因为特定语言环境下的线程只是一个线程对象,比如在Java中继承Thread类或实现Runnable接口就可以有我们自己的线程对象。但是,大家可以检查一下线程的状态,你会发现并没有Running状态。这是因为线程最终是靠OS调度系统来交给CPU的硬件线程运行的,不是JVM更不是我们写的业务代码。所以,这里希望掌握一个概念[硬件线程]。

伪多线程

在了解硬件线程这个概念之后,我们还需要明白他是属于CPU核(core)的,一个核就有对应一个硬件线程。所以我们在购买计算机的时候为什么要关注这个CPU是几核的?没错,核数越多说明CPU在同一时钟周期内能执行的线程就越多,简单点就是越快。

伪多线程是在核(core)上发生的,既然线程是受OS调度系统控制的,那么OS就有机会在这个过程中做点“手脚”。OS利用时间片(Time slice)技术实现伪多线程,让线程误以为CPU是给他一个人用的,事实上是一个硬件线程被足够小的时间片分割开交替执行多个线程指令,从而实现了伪多线程。

线程 VS 进程

关系

上下文切换

内存堆栈