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

文章目录

进程、线程、程序辨析

什么是程序?

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

什么是进程?

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

一个进程至少包含:

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

程序和进程有什么区别?

  • 程序是静态的,是代码和数据和集合,保存在磁盘
  • 进程是动态的,是程序运行起来的一个实体
  • 一个程序可以有多个进程,但是进程不是程序本身:比如一个记事本程序,我打开了两个,一个没写,一个写了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~

相关推荐
HLC++13 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室14 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy16 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕17 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫18 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生19 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1120 小时前
linux基础IO
linux·运维·服务器
BelongPanda1 天前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯1 天前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_777998341 天前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器