
看过上一篇的都知道,单核CPU的工作流程是 串行。既然是 串行,按道理来说,一次就只能运行一个程序,这在之前被叫做:单道批处理系统

就像你去银行办理业务,你前面的人没有处理完,你就只能等着。
首先我们知道,CPU的处理速度是极快的。
那问题来了,如果程序在等待用户输入,CPU却闲着,那这就是极大的浪费,我们必须压榨它的每一点性能。
怎么解决?
时间片轮转:操作系统把CPU的时间切成极小的片段,称为 时间片,通常几毫秒。

人是感知不到这几毫秒变化的,所以 同时运行多个程序 的效果就出来了。
那问题又来了,谁负责从程序A切换到程序B?
还是操作系统,它有个专门负责这件事的模块:调度器。
它会做这样的事:
这里还有个关键点。
暂停程序A的时候,需要保留它当前的工作进度;切到程序B的时候,也要恢复它上一次暂停时的工作进度。这样才能保证每个程序都能接着上次的状态继续往下跑。
这也被称作:上下文切换

那问题又来了。看过上图我们就知道,在单核CPU里,音乐其实也是断断续续处理的,为什么我们听到的却是连续播放的呢?
你可能会觉得,这是因为断开的时间非常短,人感觉不出来。这个解释没错,但还有另一个原因。
答案是:声卡中的缓冲区

缓冲区:顾名思义,就是用来临时存放数据、起缓冲作用的存储区域。
来看音乐播放器的工作模式:

所以就算CPU不是每一瞬间都在处理音乐,只要缓冲区里还有数据,声音就能继续放出来。
相信很多旧电脑都出现过这种情况:明明电脑已经卡死了,但声音还是过了几秒之后才消失,这就是原因。
诶,又有个问题。视频也有缓冲区,为什么往往是视频先卡住,然后才轮到音频卡住?
原因是:消耗速度不同
最后,如果只用一句话去理解这篇,那就是:单核CPU同一时刻确实只能真正执行一个程序,但操作系统通过时间片轮转、调度器和上下文切换,做出了“多个程序同时运行”的效果。
而音乐之所以听起来不断,是因为声卡缓冲区把“CPU断断续续地供数据”和“声音连续输出”这两件事隔开了。所以这篇真正想讲清楚的,不只是“单核怎么多任务”,而是:很多我们以为的“同时进行”,本质上都是快速切换和缓冲配合出来的结果。