进程与线程的区别?


进程是什么?

程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。

在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。

 

有了进程为什么还要线程?

进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上:

  • 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。

  • 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。

如果这两个缺点理解比较困难的话,举个现实的例子也许你就清楚了:如果把我们上课的过程看成一个进程的话,那么我们要做的是耳朵听老师讲课,手上还要记笔记,脑子还要思考问题,这样才能高效的完成听课的任务。而如果只提供进程这个机制的话,上面这三件事将不能同时执行,同一时间只能做一件事,听的时候就不能记笔记,也不能用脑子思考,这是其一;如果老师在黑板上写演算过程,我们开始记笔记,而老师突然有一步推不下去了,阻塞住了,他在那边思考着,而我们呢,也不能干其他事,即使你想趁此时思考一下刚才没听懂的一个问题都不行,这是其二。

现在你应该明白了进程的缺陷了,而解决的办法很简单,我们完全可以让听、写、思三个独立的过程,并行起来,这样很明显可以提高听课的效率。而实际的操作系统中,也同样引入了这种类似的机制——线程。

 

线程的优点

因为要并发,我们发明了进程,又进一步发明了线程。只不过进程和线程的并发层次不同:进程属于在处理器这一层上提供的抽象;线程则属于在进程这个层次上再提供了一层并发的抽象。如果我们进入计算机体系结构里,就会发现,流水线提供的也是一种并发,不过是指令级的并发。这样,流水线、线程、进程就从低到高在三个层次上提供我们所迫切需要的并发!

除了提高进程的并发度,线程还有个好处,就是可以有效地利用多处理器和多核计算机。现在的处理器有个趋势就是朝着多核方向发展,在没有线程之前,多核并不能让一个进程的执行速度提高,原因还是上面所有的两点限制。但如果讲一个进程分解为若干个线程,则可以让不同的线程运行在不同的核上,从而提高了进程的执行速度。

例如:我们经常使用微软的Word进行文字排版,实际上就打开了多个线程。这些线程一个负责显示,一个接受键盘的输入,一个进行存盘等等。这些线程一起运行,让我们感觉到我们输入和屏幕显示同时发生,而不是输入一些字符,过一段时间才能看到显示出来。在我们不经意间,还进行了自动存盘操作。这就是线程给我们带来的方便之处。

 

进程与线程的区别

  • 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。

  • 线程是进程的一个实体, CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

  • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序 健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

 注:前一阵子去淘宝面试,面试官就问了我这个问题:进程与线程的区别是什么?我当时说了一大堆,但感觉还是没说关键的点上,最后他又问最本质的区别是什么?我傻了一会,难道刚我说的没有说到吗?嘿嘿,确实有点囧啊~~

 

参考文献:

【1】  邹恒明. 计算机的心智 操作系统之哲学原理. 机械工业出版社

【2】  Andrew著 陈向群译. 现代操作系统. 机械工业出版社

【3】  http://blog.csdn.net/zengjibing/archive/2009/02/22/3923357.aspx

 

转载于:https://www.cnblogs.com/hazir/archive/2011/05/09/2447287.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进程线程是操作系统中进行任务调度和资源分配的两个基本单位,它们在**资源分配、独立性以及调度切换**等方面有所区别。以下是具体分析: 1. **资源分配** - **进程**:进程是操作系统资源分配的基础单元,拥有独立的内存空间。每个进程至少有一个执行线程进程间的资源是相互独立的,拥有自己的地址空间。 - **线程**:线程是CPU调度的基础单元,可以共享属于其父进程的资源,如堆和方法区。线程相较于进程,系统在创建或切换时的负担更小,因此常被视为轻量级进程。 2. **独立性** - **进程**:能够独立运行,并在发生错误时互不影响,因此具备良好的容错性。 - **线程**:虽然共享相同进程的资源,但每个线程还是有自己独立的程序计数器、虚拟机栈和本地方法栈,使得线程在一定程度上也可独立执行。 3. **调度切换** - **进程**:由于进程间的独立性,切换时需要独立的资源空间,所以开销较大。 - **线程**:由于共享同一进程资源,切换成本较低,可实现更高效的上下文切换。 4. **系统开销** - **进程**:进程间资源的独立性导致其创建和撤销的系统开销较大。 - **线程**:因为共享进程资源,创建和撤销的系统开销较小。 5. **并发性能** - **进程**:可以在多核处理器上并行运行,提高应用的吞吐量。 - **线程**:由于共享进程资源,并行处理多个线程进程更加高效,尤其在IO密集型的应用中体现得更为明显。 6. **编程复杂性** - **进程**:进程间的通信(IPC)较为复杂,需要操作系统提供相应的机制进行支持。 - **线程**:线程间的通信相对简单,可以通过直接读写进程数据段的方式实现。 7. **架构设计** - **进程**:在设计上,进程模型更适合于那些需要独立运行、耦合度低的任务。 - **线程**:而线程模型则适用于紧密协作的任务,例如web服务器处理并发请求的情况。 8. **执行控制流** - **进程**:一个进程至少包含一个执行控制流,可以同时处理多个任务。 - **线程**:线程进程中的执行控制流,负责当前进程中的程序执行。 针对上述分析,提出以下几点建议: - 考虑系统的性能需求,是否需要高并发处理。 - 根据应用的特性选择适合的并行处理模式(进程线程)。 - 注意线程安全问题,合理使用同步机制以避免竞争条件。 - 考虑资源消耗和系统开销,以优化资源使用。 - 评估系统的可伸缩性,确保在高负载下也能保持良好的性能。 总的来说,多线程技术尤其适合IO密集型或者需要高并发处理的应用,而多进程则更适合计算密集型或者需要隔离和安全性的场景。在选择使用哪种方式时,开发者需要根据实际的应用需求和预期的系统负载来做出决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值