深刻理解进程、线程、程序

文章目录

进程、线程、程序辨析

什么是程序?

  • 广义:解决特定问题的逻辑集合->有先后的执行顺序
  • 狭义:一个可执行的二进制文件->静态的,存在磁盘里

什么是进程?

  • 程序从磁盘加载到内存执行,会创建一个进程,程序运行结束,进程也结束->进程是动态的
  • 内核观点:分配系统资源的实体,进程是一个资源容器

一个进程至少包含:

  • 独立的虚拟地址空间
  • 页表
  • 打开的文件描述符
  • 进程状态
  • 用户身份信息
  • 当前工作目录
  • 寄存器上下文
  • 信号处理配置
  • 一个或多个线程

程序和进程有什么区别?

  • 程序是静态的,是代码和数据和集合,保存在磁盘
  • 进程是动态的,是程序运行起来的一个实体
  • 一个程序可以有多个进程,但是进程不是程序本身:比如一个记事本程序,我打开了两个,一个没写,一个写了5k字,同样都是记事本程序,但运行的是两个不同的进程

什么是线程?

  • 线程是更轻量的进程,是进程内部的一个执行流
  • 线程是CPU的调度实体--->是共享资源之上的独立执行上下文

线程独享什么?共享什么?

线程独享:

  • 栈空间
  • 线程ID
  • 线程上下文数据
  • 寄存器上下文
  • 程序计数器PC

线程共享:

  • 代码段
  • 堆区
  • 静态区
  • 打开的文件描述符
  • 地址空间

进程、线程、程序三者关系

txt 复制代码
程序:静态文件
		|
		|加载到内存执行
		V
进程:资源容器,运行实例,资源分配实体,被执行的内容
		|
		|内部包含
		V
线程:执行流,CPU调度实体,被执行的上下文

多进程和多线程

  • 多进程的本质是多个资源容器相互隔离
  • 多线程的本质是一个资源容器里面,有多个执行流共享资源

多进程的优缺点?

  • 优点:隔离性好 ,一个进程挂了不影响另一个进程;安全边界清晰, 有天然的地址空间隔离
  • 缺点:创建和切换代价大 ,要维护独立的地址空间、页表等资源;通信复杂, 管道、共享内存、socket、消息队列

多线程的优缺点?

  • 优点:创建和切换代价小 ,同进程内线程切换不需要切地址空间;共享数据方便,公用堆和全局对象
  • 缺点:更容易引发同步和竞争问题 ,共享资源过多,就需要把资源合理保护起来;一个线程崩了,会拖垮整个进程
txt 复制代码
进程A : 地址空间A
进程B :地址空间B
进程C : 地址空间C

彼此隔离

进程P
=----------------------------=
共享地址空间/堆/全局对象/fd表  
线程1	线程2		线程3     
=----------------------------=

共享方便

怎么选择多进程和多线程?

  • 业务强调隔离性、稳定性、更安全,选多进程
  • 业务强调共享数据方便、创建和切换成本低,选多线程

总结:多进程在隔离性上占优势,多线程在共享性和轻量化占优势

linux视角下的线程

Linux内核视角看:线程和进程本质都是一个task,所以并没有给线程单独设计一个独立于进程的新实体,统一抽象成task

linux中的线程是怎么来的?

Linux中创建线程依赖底层的clone

  • 如果clone时,大量资源共享
    • 共享地址空间
    • 共享文件描述符表
    • 共享信号处理信息

那这和task就视为线程

  • 如果不共享这些资源,视为进程

还是如上文所说,线程是轻量化的进程,二者没有太大区别

done~

相关推荐
琥珀色糖3 小时前
Linux守护进程
linux·终端·守护进程·会话·进程组
开心大爆炸7 小时前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun27 小时前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
苏生Susheng8 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
Ruiery8 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
分支预测失败8 小时前
RISC-V AIA 中断架构实战:从 PLIC 到 APLIC 与 IMSIC 的迁移
linux·后端
GeW8 小时前
RHCE学习拿证计划:锁定核心考点,实现备考效率最大化
linux
snow@li9 小时前
服务器运维:Alibaba Cloud Linux 4 LTS 64位 根目录全景深度解析文章
linux·运维·服务器
苏生Susheng9 小时前
【软件实施】Linux企业运维常用命令手册
java·linux·运维·服务器·springboot·springcloud·软件实施
额额额对了9 小时前
Linux 进程间通信(IPC)核心机制:消息队列、共享内存与信号量详解
linux·网络·网络协议