关于进程和线程的区别

来源:互联网 发布:互联网公司算法 编辑:程序博客网 时间:2024/06/08 18:48

有个话题似乎永远都不会结束,那就是进程和线程的区别。下面是我们在百度搜到的官方的回答。

说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 
说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 
巴拉巴拉。。。(抱歉我已经看不下去了,有兴趣者可自行百度,如此的描述被无数次转载引用。)

以上的描述仿佛是高中物理课本上描述一个定理般无懈可击,但是,总觉得哪里不对劲。。。

是的,看完之后不出十分钟,再问你进程与线程的区别,你的脑子依然一片混沌。当然,如果你是过目不忘或记忆力超群的天才,能准确把这些内容背出来除外。

出现这种情况也许是因为,进程和线程本身都是比较抽象的概念,你不能实实在在的看到它们,然后指出来。那是一个进程,那是一把线程。当然,你可以用命令查看它们,但是这并不能帮助你更好的理解它们之间的差异。

如果能将它们类比成我们容易理解的东西,也许会帮助我们了解这个问题的答案。下面,我尝试用更加形象的方法说明他们之间的区别。

ok,现在需求来了,要求我们盖一栋楼。盖楼需要的建材都在当地ZF那里(假设),如有需要你可以向它申请。(ZF=OS,建材=内存,CPU等系统资源)

要盖楼我们得有施工队啊,于是我们找来了施工人员,里面有水泥工,瓦工,搬运工等。(Coding。。这些工人就相当于能干活的一行行代码)

好,人招齐了,现在就要开始干活。没有建材怎么干活啊,于是我们向ZF申请砖,水泥,钢筋等建材。施工队对ZF说,“我们要干活了,请给我们建材。”ZF看了一下手头的储备,发现挺充裕,说“OK,给你们,停工的时候记得还回来。”(程序要执行了,需要向系统申请资源。这个时候,其实进程的概念出现了,进程就是应用程序一次执行的过程,在这里,当我们开始施工盖楼,进程就算创建了。只有以施工队的名义向ZF申请资源,它才会给你,这也是ZF受理资源申请请求的最低级别部门,这也就是所谓的“进程是系统进行资源分配的最小单位。)

接下来,施工队中的水泥工拿到了水泥开始混水泥,瓦工开始砌瓦,搬运工开始搬砖,各司其职,相互独立,勤勤恳恳。(这些真正在干活的工人们就是所谓的线程,他们隶属于这个这个施工活动(进程)中,共享施工队向ZF申请来的资源。这也就是所谓的“线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位“)

利用这种类比的方法也可以理解多线程的优点,线程间的通信为什么比进程间更加高效,资源共享与互斥等问题,请自行拓展。

0 0