您的位置:首页 > 其它

线程与进程,以及两者的联系与区别。

2014-08-12 12:12 162 查看
端正态度,好好写博客,找份好工作。

线程与进程,以及两者的联系与区别。

这一直以来都是互联网面试笔试的基础点

一个程序至少有一个进程,一个进程至少有一个线程。

这是我在网上找的一篇帖子,形象地介绍了两者的的关联,相当不错():

http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html

另外这篇也不错:点击打开链接

按《计算机操作系统》的定义,进程是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的实体。

线程是进程中的一个实体,是系统独立运行和独立调度的单位。

My God。定义恐惧症,怎么办?如果面试官问了这个,心里一个小紧张,官方语言那记得起来,回答语无伦次,咋整。

我还是比较喜欢前面帖子的比喻。

操作系统是工厂,时刻在运行。

进程是车间,时刻在运作。

线程就好比车间里的工人,时刻在劳作。

为啥这么说呢,是有一定道理的。当然,现实中工厂都是流水线操作,比喻有点不恰当。

前世:

早期单道批和多道批操作系统,都属于小作坊,要的干活少,产品复杂度低,其数量也少,单干就行。尚未引入进程,计算机程序和I/O操作顺序执行,可以接受滴。但是经过时间的发酵,不一样了,小作坊扩大了,接单多了,产品要求更高了。还顺序执行,肯定亏本。引入进程,计算机程序和I/O操作各开一个进程,并发执行,效率就上去了,小工厂就能维持,不会崩。可以谁都不停止发展的脚步,进程暂时满足了需求,以后嘞。小工厂终将变成富士康。

今生:

现代化的工厂,正如而今的多用户多任务的操作系统,系统复杂得人发指。于是乎,线程就产生了。



进程是用于组织资源的单位,代表程序的一次执行。进程将相关的资源组织在一起,这些资源包括:内存地址空间,程序,数据等,将这些以进程的形式组织起来可以使得操作系统管理这些资源更为容易,也可以极大提高程序的运行效率。

工厂给某车间分配相应的资源,包括机器、原材料等。车间生产一个批次的产品,就得部署机器,安排人员,将原料产出。

线程是安排CPU执行的最小单位,是进程的一个实体,是比进程更小的能独立运行的基本单位。

线程共享进程的地址空间,每个工人也可以在车间自由协作,共享整个空间。也就推出了多线程的概念。

有些资源只能一个人用,某工人用机器切割木板,其他人就不能用了,更上厕所一样一样的,得排队候着。一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。这就叫"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。



线程与进程的区别:

1、每个工人有自己的岗位,离开了车间,他做个毛线啊!每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

2、所独占的资源不同,如下表。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间。

进程占有的资源
线程占有的资源
地址空间

全局变量

打开的文件

子进程

信号量

账户信息


寄存器

状态

程序计数器
3、多进程的程序要比多线程的程序健壮,因为线程没有独立的地址空间,一个线程死掉等于整个进程死掉,某工人玩忽职守,今天去泡妹子没来上班,整个产品就出不来嘛。但在进程切换时,耗费资源较大,效率要差一些。

线程的优点:

1、 车间内,工人相互协作,各自分工,可以产出复杂精妙的产品。多个线程互相同步或互斥,并行完成工作。

2、 线程比进程而言,更加轻量,所以线程的创建和销毁的代价更小。搞起和搞掉一个车间vs 调入和调出一个员工,两者的代价不在一个层次上。

3、 线程提高了性能。线程宏观上并行,微观上串行。多线程允许进程中的其它线程继续执行而不是整个进程被阻塞。某个工人占用某台机器,其他人可以去做其他工作。

如果各位想要深入的话,试试去看看《现代操作系统》之类的书吧。

热烈欢迎大家点评指正,有想法可以互相交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: