进程和线程的引入和区别总结

本文介绍了进程和线程的概念,探讨了引入进程和线程的原因,以及它们在资源占用、并发执行等方面的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么引入进程和线程

在早期的计算机系统中单道批处理系统的程序是顺序执行,在内存中仅装入一道用户程序,独占系统的所有资源,只有在一个系统完成之后才允许装入另一个系统,这种方式浪费资源,系统运行效率低。

多道批处理系统:同时在内存中装入多个系统,让他们同时共享系统资源,并发执行,所以引入了进程的概念。

在80年代中期之前,进程一直是能拥有资源和独立调度的基本单位,后来人们提出了比进程更小的基本单位——线程,想提高程序并发执行的程度。

进程在并发执行时所需付出的时空开销:

  • 创建进程:系统创建进程时,必须给其分配其必须的所有资源,如内存空间、I/O设备、以及相应的PCB。
  • 撤销进程:撤销进程时必须对其所占的所有资源进行回收,再撤销PCB。
  • 进程切换:对进程上下文切换时,需要先保留当前进程的CPU环境,设置新的选中的进程的CPU环境,花费不少处理机时间。

所以提出了线程:轻量级进程的概念。线程是调度和分配的基本单位,因为其拥有资源较少,当县城切换时,仅需保存和设置少量寄存器内容,切换代价远小于进程。

进程和线程的区别

指标进程线程
定义进程的两个属性:1.进程是可拥有资源的基本单位 2.进程同时是可独立调度和分配的基本单位线程是调度和分派的基本单位
关系因为每个进程都有自己的进程地址空间,所以每个进程之间都是独立的,进程之间的关系可以是父子关系因为一个进程可以创建多个线程,多个线程除了有自己的一点资源外,都共享进程地址空间中的资源,所以线程之间是平等的,一个进程中只有一个主线程
拥有资源进程PCB线程可以拥有的资源:线程ID、一组寄存器、栈、errno、信号屏蔽字、调度优先级
终止或崩溃时进程终止时,其他进程不会受到影响,因为每个进程之间是独立的一个线程崩溃时,其他线程会受到影响,因为一个线程如果崩溃,很可能会影响进程地址空间中的数据,这样其它线程也会受影响
切换进程切换消耗大线程切换消耗小
实现fork()pthread_create()

引入线程使系统的并发性更好,支持多处理机系统: 对传统的进程,即单处理进程,不管有多少个处理机,都只能在一个处理及上运行,但多线程进程,可以将一个进程中的多个线程分配到多个处理机上,使它们并发执行,加快了进程的完成。

### 进程线程区别 #### 定义 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,它是系统进行资源分配调度的一个基本单位[^1]。 线程则是进程内部的一个实体,是被系统独立调度的基本单位,一个进程可以由多个线程组成[^3]。 #### 资源拥有 进程是系统中拥有资源的基本单位,每个进程都有自己的地址空间、内存其他资源[^3]。相比之下,线程本身并不拥有系统资源(只拥有一点必不可少的资源),而是共享隶属于同一个进程的资源,比如内存地址空间、文件句柄等[^3]。 #### 地址空间 每个进程都有自己独立的地址空间,这意味着一个进程无法直接访问另一个进程的数据。然而,同一进程下的多个线程共享该进程的地址空间,因此它们可以直接读写彼此的数据结构,这种特性使得线程间的通信更加高效[^3]。 #### 并发性 在引入线程的操作系统中,不仅进程之间可以并发执行,而且同一线程组内的多个线程也可以并发执行,从而进一步提升了系统的并行性资源利用率。此外,不同进程中的线程也能够实现并发执行。 #### 创建与销毁成本 创建或撤销一个进程的成本较高,因为需要为其分配或释放大量的资源,如内存空间、输入/输出设备等[^2]。与此相对的是,线程的创建销毁开销较小,因为它只需要初始化或清理少量的状态信息即可完成操作[^2]。 #### 切换成本 当发生进程切换时,操作系统必须保存当前进程的所有状态,并加载下一个待执行进程的状态,这一过程涉及到大量寄存器内容的变化以及虚拟存储器映射表项更新等问题,因而消耗较多时间;而在线程间切换时则无需改变整个上下文环境,仅仅调整少数几个寄存器便足以满足需求,故其速度更快。 #### 健壮性对比 由于各进程间相互隔离良好,即使某一特定应用出现问题也不会波及其它正在运行的应用软件,所以基于多进程架构构建起来的服务端往往具备更高的稳定性;但是另一方面来看的话,如果采用多线程方式开发相同业务逻辑,则一旦其中任意一条分支出现异常状况就可能导致整体失败的结果,这是因为所有子任务共处于统一命名空间之下所致。 #### 多处理器支持情况 对于传统的单一主线程构成的应用来说,无论计算机配置了多少颗物理核心也只能利用其中一个来进行计算工作而已;而对于那些采用了多条轻量级辅助单元共同协作形式设计出来的新型解决方案而言,则完全有能力充分利用现代高性能硬件所提供的强大算力优势——即将原本集中于一处的任务分解成若干份分别交给不同的CPU核去处理以达到加速目的。 ```python import threading def worker(): """定义一个简单的线程函数""" print(f'Worker thread running {threading.current_thread().name}') if __name__ == "__main__": threads = [] for i in range(5): # 启动五个线程作为例子展示如何简单地增加并发能力 t = threading.Thread(target=worker, name=f'Thread-{i}') threads.append(t) t.start() for t in threads: # 主线程等待所有子线程结束才继续往下走 t.join() print('All workers have finished their jobs.') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值