进程和线程的区别与联系

在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。


为了让进程完成一定的工作,进程必须至少包含一个线程。



进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源,所以我们也说,进程是资源分配的最小单位。更多详情,请看《进程的介绍》


线程存在与进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。


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


如果说进程是一个资源管家,负责从主人那里要资源的话,那么线程就是干活的苦力。一个管家必须完成一项工作,就需要最少一个苦力,也就是说,一个进程最少包含一个线程,也可以包含多个线程。苦力要干活,就需要依托于管家,所以说一个线程,必须属于某一个进程。进程有自己的地址空间,线程使用进程的地址空间,也就是说,进程里的资源,线程都是有权访问的,比如说堆啊,栈啊,静态存储区什么的。


线程就是个无产阶级,但无产阶级干活,总得有自己的劳动工具吧,这个劳动工具就是栈,线程有自己的栈,这个栈仍然是使用进程的地址空间,只是这块空间被线程标记为了栈。每个线程都会有自己私有的栈,这个栈是不可以被其他线程所访问的。


进程所维护的是程序所包含的资源(静态资源), 如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler,等;


线程所维护的运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集,等;


线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护;而进程正相反。


进程是操作系统进行资源分配的基本单位,而线程进程内的一个执行单元,也是进程内的可调度实体。一个进程可以包含多个线程,而线程共享了进程的某些资源。进程线程之间存在以下区别: 1. 本质区别进程是操作系统进行资源分配的基本单位,而线程是独立调度分派的基本单位。 2. 包含关系:一个进程内可以有多个线程线程进程的一部分,因此线程也被称为轻量级进程或轻权进程。 3. 资源开销:每个进程都有独立的代码数据空间,程序之间的切换会有较大的开销;而线程可以看作轻量级的进程,同一类线程共享代码数据空间,线程之间切换的开销小。 4. 创建销毁:创建一个进程需要遍历内存资源找到合适的内存再分配给它,销毁进程也需要遍历内存资源。而创建销毁一个线程相对不那么麻烦。 5. 内存分配:同一个进程线程共享本进程的地址空间资源,而进程之间的地址空间资源是相互独立的。 6. 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响;但一个线程崩溃可能会导致包含该线程的整个进程直接死掉。 7. 操纵者不同:进程的操纵者一般是操作系统,线程的操纵者一般是编程人员。 8. 执行过程:每个独立的进程有程序运行的入口、顺序执行序列程序出口,而线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值