进程(Process)的官方解释,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操做系统结构的基础。
相对于程序而言,进程是一个动态的概念。可能有人不能理解动态的内涵,因此让咱们来举个栗子:工具
一个母亲想给她的女儿烹饪一个蛋糕,因而她找来一本烹饪书籍,上面记载着作蛋糕的食谱:须要面粉、鸡蛋、蜂蜜等等原料。因而她来到厨房,准备好食材和器皿、烤箱等制做工具,开始执行作蛋糕这个活动。操作系统
在这个比喻里,这位母亲就象征着CPU,烹饪书籍上对制做蛋糕的流程,就是保存在内存里静态的程序。而那些食材,则表明程序所需的数据。而进程,则表示整个制做蛋糕的过程。线程
对于单核处理器而言,一个CPU在一个时间点只能处理一个进程。每当一个进程在CPU里被执行时,其余的进程都处于等待状态。code
沿用上面的例子,母亲在作蛋糕的过程当中,她的儿子忽然跑过来,告诉她本身被蜜蜂蜇了,这时这位母亲判断了事情的轻重缓急后,暂停了制做蛋糕的流程(暂停优先级低的进程),并记住了本身作到了哪一个环节(好比刚打完鸡蛋),开始处理儿子头上的伤口(开始执行新进程)。她找来一本《家用急救指南》(新进程中的程序),按照书上记载的流程,给儿子包扎。处理完儿子的这个紧急事件以后,这位母亲又回到作蛋糕的流程里,她回忆起本身刚才正在打鸡蛋,因而从以前暂停的步骤开始(取出内存中记载的状态),继续执行作蛋糕任务。进程
总而言之,进程表明的是一系列动做的执行,包括程序的运行、输出、输出和状态的记录。事件
线程(Thread)是创建在进程的基础上的一次程序运行单位,是cpu调度的最小单位
在一些文献中,线程又被称为微进程(miniprocess),这意味着,线程在不少方面和进程是相似的,惟一不一样的,是线程之间共享了相同的内存空间(相对于一个进程而言),而进程与进程之间,则拥有各自独立的内存空间。换句话说,一个进程里能够有一个或多个线程,这些线程共享着内存为进程分配的空间。ip
咱们为何须要线程?内存
让咱们来考虑一个文字处理器的例子。在文字处理器打开的一篇文档中,一共有800页。假如文档做者此时删除了第一页的某段内容,而后他但愿跳转到第600页查看该页对应的篇幅。对于文字处理器而言,因为第一页的文字有了改动,它并不知道此时第600都有哪些文字,所以须要对600页以前的文字从新排版计算,而后获得第600页的内容。这样一来,当用户敲下直达第600页的命令后,须要等好一下子才能看到内容,这显然不是咱们但愿的。而线程此时就可以派上用场。假设此时有两个线程,一个负责用户交互,另外一个负责排版。当用户在第一时刻更改了文档内容后,负责用户交互的线程会通知排版线程,告诉它删掉了哪些东西,排版线程获得信息后,开始在后台疯狂地计算,这样一来,在用户下达跳转至600页的命令以前,排版线程极可能已经计算出第600页要展现的是哪些内容了。资源
总结一下进程和线程的概念,主要有如下几点须要了解:
1.CPU里一个时刻只能执行一个任务,即进程
2.每一个进程之间的内存空间是独立的
3.每一个进程里包含至少一个线程,而且线程之间共享着这个进程的内存空间文档
本篇文章引用了如下文献的内容:
Modern Operating Systems——by Andrew S. Tanenbaum / Herbert Bos