【Linux】进程和线程间的区别与联系

带你轻松理解进程与线程的区别与联系:

进程线程
定义资源分配和拥有的基本单位CPU调度的基本单位
切换情况对应进程的CPU环境的保存以及新进程环境的设置保存和设置程序计数器,少量的寄存器,以及对应的线程栈
切换者操作系统操作系统
切换过程用户态->内核态->用户态用户态->内核态->用户态
拥有资源CPU资源,内存资源,文件资源等程序计数器,少量寄存器,线程栈等
并发性不同进程之间切换实现并发,各自占有CPU实现并行一个进程内部的多个线程并发执行
系统开销切换虚拟地址空间,切换页表,切换内核栈和硬件上下文,开销很大切换时只需要保存和设置少量寄存器的内容,开销很小
通信进程间通信需要借助操作系统线程间可以直接读取进程数据段(全局变量)来实现通信

线程的优点:

  • 创建一个新线程的代价要比创建一个新进程小得多。
  • 与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多。
  • 线程占用的资源要比进程少很多。
  • 能充分利用多处理器的可并行数量。
  • 在等待慢速I/O操作结束的同时,程序可执行其他的计算任务。
  • 计算密集型应用,为了能在多处理器系统上运行,将计算分解到多个线程中实现。
  • I/O密集型应用,为了提高性能,将I/O操作重叠。线程可以同时等待不同的I/O操作。

线程异常

  • 单个线程如果出现除零,野指针问题导致线程崩溃,进程也会随着崩溃。
  • 线程是进程的执行分支,线程出异常,就类似进程出异常,进而触发信号机制,终止进程,进程终止,该进程内的所有线程也就随即退出

线程共享进程数据,但是也拥有自己的一部分数据

  • 线程ID
  • 少量寄存器
  • errno
  • 信号屏蔽字
  • 调度优先级

进程的多个线程共享 同一地址空间,因此Text Segment(代码段)、Data Segment(数据段)都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:

  • 文件描述符表
  • 信号处理方式
  • 当前工作目录
  • 用户ID和组ID
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值