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

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

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

线程的优点:

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

线程异常

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

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

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

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

  • 文件描述符表
  • 信号处理方式
  • 当前工作目录
  • 用户ID和组ID

猜你喜欢

转载自blog.csdn.net/qq_43727529/article/details/129910745