1、前言
前段时间没事跑到北京去应聘,HR和我聊得很high,给我描述了来公司后的宏伟蓝图,一顿神游;到技术面时来了两个小崽子,一顿算法和数据结构,没有准备的我狼狈不堪,完事,HR很疑惑地问我,怎么技术那边说你技术不是很强,这是怎么回事?我估计HR是不是心里在嘀咕,这人不是个大忽悠吧,浪费我那么多吐沫星子!回来痛定思痛,还是埋头补课吧。本文是网上有关资料的基础上整理归纳的。
2、来历
(1)下面细说背景:
CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS,等等外设)构成我们的电脑,电脑的运行,实际就是CPU和相关寄存器以及RAM之间交互的过程。
(2)一个最最基础的事实:
CPU太快,太快,太快了,寄存器仅仅能够追的上他的脚步,RAM和别的挂在各总线上的设备完全是望其项背。那当多个任务要执行的时候怎么办呢?轮流着来?或者谁优先级高谁来?不管怎么样的策略,一句话就是在CPU看来就是轮流着来。
(3)一个必须知道的事实:
执行一段程序代码实现一个功能的过程 :当得到CPU的时候,相关的资源必须也已经就位,就是显卡啊,GPS啊什么的必须就位,然后CPU开始执行。这里除了CPU以外其它所有资源就构成了这个程序的执行环境,也就是我们所定义的程序上下文。当这个程序执行完了,或者分配给它的CPU执行时间用完了,那它就要被切换出去,等待下一次CPU的临幸。在被切换出去的最后一步工作就是保存程序上下文,因为这个是下次它被CPU临幸的运行环境,必须保存。
(4)串联起来的事实:
前面讲过在CPU看来所有的任务都是一个一个的轮流执行的,具体的轮流方法就是:先加载程序A的上下文,然后开始执行A,保存程序A的上下文,调入下一个要执行的程序B的程序上下文,然后开始执行B,保存程序B的上下文......
得益于CPU的计算速度,我们可以“同时”运行多个任务,实