学科分类
目录

多任务的实现原理

操作系统可以同时运行多个任务。例如,计算机在同一时刻既可以使用浏览器上网,又可以使用酷我播放音乐,还能挂着QQ工具聊天......所有的这些都体现了多任务运行的现象。

现在,多核CPU已经很普及了。即使使用过去的单核CPU,依然能同时运行多个任务,它是如何办到的呢?答案是操作系统轮流让每个任务交替执行。例如,任务1执行0.01秒以后,再切换到任务2执行0.01秒......以此重复执行下去,原理如图1所示。由于CPU运行的速度实在太快了,任务切换的速度我们的肉眼根本感知不到,所以从表面上来看,所有的任务是在同时运行的。

img

图1 单核CPU调度任务

图1中要执行的任务有QQ、微信、邮箱、谷歌、酷我等,由于单核CPU每个时间点只能运行一个任务,所以按照时间片轮转的方式(即任务切换一遍后又重复切换),让每个任务执行2us(举例值)的时间,从而形成多个任务同时运行的假象。

实际上真正地并行执行多个任务,只能在多核CPU上完成。不过,计算机要执行的任务数量非常庞大,远远大于CPU内核的数量,所以操作系统也会自动把任务轮流调度到每个核心上执行。接下来,使用一张图来分析多核CPU调度任务的原理,如图2所示。

img

图2 双核CPU调度任务

图2中,双核CPU相当于计算机有两个单核,每个单核负责执行一个任务,这样就能同时执行两个任务。当这一批的任务运行一段时间(2us)以后,会再分配另外一批任务继续运行,这样就真正地形成了多任务的同时运行。

上述延伸出两个概念:并发和并行。从宏观角度上来讲,两者都能够同时处理多个任务,但是两者又有区别。并行是指两个或者多个任务在同一时刻发生,而并发是指两个或者多个任务在同一时间间隔内发生。比如在某个时间段中,有若干个程序都处于已启动运行到运行完毕之间的状态,某个时刻只能有一个程序运行,这种现象就是并发。

这里面的“同时”、“并发”只是一种宏观上的感受,实际上从微观层面看只是进程/线程的轮换执行,由于切换的时间非常短,所以产生了一起执行的感觉。

点击此处
隐藏目录