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

文章目录

进程、线程、程序辨析

什么是程序?

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

什么是进程?

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

一个进程至少包含:

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

程序和进程有什么区别?

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

相关推荐
2301_789015624 分钟前
Linux基础开发工具一:软件包管理器、vim编辑器
linux·服务器·c语言·汇编·c++·编辑器·vim
wx_jiuyun6786 分钟前
渔夫Telegram群机器人系统详解
linux·服务器·机器人
开开心心就好8 分钟前
新手友好的音视频格式转换工具
linux·服务器·网络·智能手机·pdf·beautifulsoup·音视频
哎呦,帅小伙哦8 分钟前
Nanomsg 源码深度剖析:从 protocol.h 内核抽象到 Pair 一对一通信全实现
linux·nanomsg
hanlin0313 分钟前
基于OpenHarmony 5.0的CAN驱动移植步骤
linux·c语言·华为·can·openharmony·t527
刘国华-平价IT运维课堂14 分钟前
Ubuntu 26.04 LTS 发布,研发与运维需要关注什么?
linux·运维·服务器·人工智能·ubuntu
YIN_尹14 分钟前
【Linux系统编程】基础IO第一讲——系统文件IO
android·java·linux·c++
j_xxx404_15 分钟前
MySQL数据库基础硬核解析:从 C/S 网络服务到磁盘文件与存储引擎
linux·运维·服务器·开发语言·数据库·mysql·ai
艾莉丝努力练剑15 分钟前
【QT】系统相关:QT文件
linux·服务器·开发语言·网络·qt·tcp/ip·计算机网络
zh路西法9 小时前
【navigation2全局路径更新频率修正】行为树框架的巧妙利用
linux