https://juejin.cn/post/7267091810366472248
要了解一个东西究竟是什么,我一般会从这个东西有什么直观的体现,再到它是什么,怎么运转以及何时运转等扩展问题进行深入学习。
单核处理器能够支持多线程执行代码就是因为线程的上下文切换。
具体是如何做到的呢?
CPU通过给每个线程分配CPU时间片来实现这个机制。
什么是时间片?CPU分配给每个线程的时间。时间片非常短一般几十ms。
CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的。
把当前任务的状态保存下来,以便下次切换回这个任务时可以再次加载这个任务的状态,并加载下一任务的状态并执行。任务的状态保存及其再加载,这个过程就叫做上下文切换。
如果可运行的线程数大于CPU的数量,CPU利用时间片轮转的方式,可以使用户感觉这些任务正在同时进行。时间片用完或者被迫中止等情况就会发现另一个线程来执行CPU时间片。
线程上下文是指某一时间点CPU寄存器和程序计数器的内容。
每个线程都有一个程序计数器、一组寄存器、堆栈。
记录要执行的下一条指令。是一个专用寄存器,用来表明指令序列中CPU正在执行的位置,存的值为正在执行的指令的位置或者下一个将要被执行的指令的位置。