二、进程与线程(工作最高频

2026-07-18wei👁 10 阅读9 分钟阅读📝 3837 字💬 0 评论
二、进程与线程(工作最高频

二、进程与线程(工作最高频)

⭐⭐⭐⭐⭐ 面试最高频章节(Java、Linux、操作系统、后端开发必考)

本章重点:

  • 进程与线程
  • PCB
  • 进程状态
  • 调度算法
  • 并发与同步
  • 死锁
  • IPC 通信

一、进程(Process)

1. 什么是进程?

进程(Process) 是程序的一次执行过程,是操作系统进行资源分配和调度的基本单位。

简单来说:

程序是静态的,进程是动态运行的。

例如:

电脑中打开:

微信QQChromeIDEA 

每一个运行的软件都是一个进程。


2. 程序和进程区别

程序 进程
静态 动态
存放在磁盘 运行在内存
不占CPU 占CPU、内存
可以有多个进程 是程序运行后的实例

例如:

QQ.exe 

只是程序。

打开两个QQ:

QQ① QQ② 

就是两个不同的进程。


二、线程(Thread)

1. 什么是线程?

线程(Thread):

CPU 调度的最小单位。

线程属于进程。

一个进程可以包含多个线程。

例如:

Chrome 浏览器

Chrome ├── 页面渲染线程├── 网络线程├── JavaScript线程├── GPU线程└── 音频线程 

这些线程共享同一个进程资源。


2. 为什么需要线程?

假如没有线程:

下载文件时:

浏览器  只能等待下载完成  页面卡死 

有线程:

下载线程 + 页面渲染线程 + 网络线程 

页面依旧可以正常浏览。


三、进程和线程区别(★★★★★)

这是面试最高频。

项目 进程 线程
定义 资源分配单位 CPU调度单位
是否独立 独立 属于进程
地址空间 独立 共享
创建开销
切换开销
通信 IPC 共享变量
崩溃影响 不影响其他进程 可能导致整个进程退出

口诀:

资源归进程,调度看线程。


四、PCB(Process Control Block,进程控制块)

PCB:

操作系统管理进程的重要数据结构。

可以理解成:

每个进程的"身份证"。

没有 PCB,

操作系统就不知道:

它是谁? 运行到哪里? 占了多少内存? 优先级是多少? 

PCB包含哪些内容?

主要包括:

① 进程ID(PID)

例如:

PID=1001 PID=1002 

Linux:

bash
ps -ef 

可以看到 PID。


② 进程状态

例如:

运行 等待 阻塞 

③ 程序计数器(PC)

记录:

CPU执行到哪一条指令。

切换回来继续执行。


④ CPU寄存器

保存:

CPU现场。

例如:

AX BX CX DX 

⑤ 内存信息

例如:

代码区 数据区   

⑥ 打开的文件

例如:

a.txt b.jpg socket连接 

五、进程状态(★★★★★)

经典五状态模型。

            创建         就绪 Ready          运行 Running          ↙         ↘阻塞 Waiting     结束 Terminated 

① 新建(New)

刚创建。

例如:

fork() CreateProcess() 

② 就绪(Ready)

已经准备好了。

等待CPU。

例如:

QQ 微信 IDEA 

都在等待CPU。


③ 运行(Running)

CPU正在执行。

注意:

一个CPU核心:

同一时刻只能运行一个线程。


④ 阻塞(Blocked)

等待某个事件。

例如:

等待磁盘 等待网络 等待用户输入 

CPU不会一直等。

而是:

去执行别的进程。


⑤ 结束(Terminated)

程序退出。

例如:

exit() return 0; 

PCB被释放。


六、进程创建与销毁

创建

Linux:

c
fork(); 

Windows:

CreateProcess() 

创建过程:

申请PCB  申请内存  加载程序  进入就绪队列 

销毁

例如:

程序退出 kill 异常崩溃 

操作系统:

释放内存  关闭文件  删除PCB 

七、CPU调度(Scheduling)

多个进程:

QQ IDEA Chrome 微信 

CPU:

到底先执行谁?

由:

CPU调度算法

决定。


八、时间片(Time Slice)

时间片:

CPU一次允许程序运行的时间。

例如:

10ms 

流程:

QQ  Chrome  IDEA  微信  QQ 

由于速度很快:

用户感觉:

像同时运行。

这就是:

时间片轮转。


九、优先级(Priority)

有些程序:

更重要。

例如:

系统进程 杀毒软件 视频播放 后台更新 

CPU:

优先执行:

优先级高的程序。

例如:

Priority=10 Priority=1 

CPU:

先执行10。


十、常见调度算法(了解)

算法 特点
FCFS(先来先服务) 谁先来谁先执行
SJF(最短作业优先) 时间短优先
时间片轮转(RR) 最常见
优先级调度 高优先级先执行
多级反馈队列 Linux 常见思想

实际系统:

通常组合使用。


十一、并发(Concurrency)

并发:

多个任务:

交替执行。

例如:

QQ  IDEA  Chrome  QQ 

注意:

不是同时。

而是:

快速切换。


并行(Parallel)

多个CPU:

真正同时执行。

例如:

CPU1 QQ CPU2 Chrome 

并发 vs 并行

并发 并行
一个CPU交替执行 多CPU同时执行
宏观同时 真正同时

十二、临界资源(Critical Resource)

多个线程:

共同访问:

同一个资源。

例如:

余额 库存 数据库 打印机 

这就是:

临界资源。


为什么危险?

例如:

余额:

100元 

线程A:

取50 

线程B:

取30 

如果同时操作:

可能得到:

20 50 70 

结果错误。

这就是:

数据竞争(Race Condition)。


十三、互斥(Mutex)

互斥:

同一时刻:

只能一个线程访问。

例如:

厕所。

有人  锁门  别人等待 

程序:

线程A  加锁  操作  解锁 

其他线程:

等待。


常见互斥工具

  • Mutex(互斥锁)
  • synchronized(Java)
  • ReentrantLock
  • SpinLock(自旋锁)

十四、同步(Synchronization)

同步:

线程之间:

按顺序执行。

例如:

线程A: 生产数据  线程B: 消费数据 

必须:

A完成,

B才能开始。


常见同步工具

Java:

wait() notify() CountDownLatch Semaphore Condition 

Linux:

Semaphore Mutex Condition Variable 

十五、死锁(Deadlock)(★★★★★)

什么是死锁?

两个线程:

互相等待。

谁也不能继续。

例如:

线程A: 拿着锁A 等待锁B 
线程B: 拿着锁B 等待锁A 

最终:

一直等待。

程序卡死。


四个产生条件(必背)

必须同时满足:

① 互斥

资源只能一个人使用。


② 请求保持

拿着资源,

继续申请新的资源。


③ 不可剥夺

资源不能强制抢走。


④ 循环等待

形成等待环。

例如:

A等B  B等C  C等A 

口诀:

互斥、保持、不剥夺、循环等待。


十六、如何避免死锁?

常见方法:

方法一:按顺序加锁(最常用)

统一:

先锁A 后锁B 

不要:

A→B B→A 

方法二:一次申请全部资源

避免:

边申请边等待。


方法三:设置超时

例如:

Java:

java
tryLock(3, TimeUnit.SECONDS); 

超时:

放弃锁。


方法四:减少锁

锁越少,

死锁概率越低。


十七、进程通信(IPC,Inter Process Communication)

不同进程:

内存独立。

因此:

不能直接共享变量。

需要:

IPC(进程间通信)


十八、管道(Pipe)

特点:

最简单。

进程A  Pipe  进程B 

特点:

  • 半双工
  • 父子进程常用
  • Linux常见

例如:

bash
ls | grep txt 

就是:

管道。


十九、消息队列(Message Queue)

通过:

消息。

发送  消息队列  接收 

优点:

  • 解耦
  • 异步
  • 不需要同时在线

例如:

订单系统  MQ  库存系统 

常见:

  • RabbitMQ
  • RocketMQ
  • Kafka(偏消息流)
  • ActiveMQ

二十、共享内存(Shared Memory)

多个进程:

共享:

同一块内存。

A  共享内存  B 

优点:

速度最快。

缺点:

必须加锁。

否则:

数据混乱。


二十一、Socket(★★★★★)

Socket:

网络通信。

不仅:

进程通信。

还能:

跨机器通信。

例如:

浏览器  Socket  Web服务器 

Java:

java
Socket socket = new Socket("127.0.0.1",8080); 

TCP、UDP:

都是基于Socket。


二十二、各种IPC方式比较(★★★★★)

通信方式 是否跨机器 速度 特点
管道(Pipe) 父子进程
消息队列 异步通信
共享内存 ⭐最快 需要同步机制
Socket 较快 网络通信、应用最广

二十三、本章重点总结(必背)

进程 vs 线程

进程 线程
资源分配单位 CPU调度单位
独立地址空间 共享地址空间
创建开销大 创建开销小
通信需要IPC 共享变量即可

PCB

PCB记录:

  • PID
  • 状态
  • 程序计数器
  • CPU寄存器
  • 内存信息
  • 打开文件

五状态模型

新建  就绪  运行 ↙      ↘ 阻塞    结束 

调度基础

  • 时间片轮转
  • 优先级调度
  • FCFS
  • SJF
  • 多级反馈队列

并发问题

  • 临界资源
  • 数据竞争
  • 互斥(Mutex)
  • 同步(Synchronization)

死锁四个条件(口诀)

互斥、保持、不剥夺、循环等待。


IPC 通信

IPC 场景
Pipe 父子进程
消息队列 异步消息
共享内存 高性能通信
Socket 网络通信

面试/考试高频问题

Q1:进程和线程有什么区别?

答: 进程是资源分配的基本单位,拥有独立的地址空间;线程是 CPU 调度的基本单位,共享所属进程的资源。线程创建和切换开销更小,适合提高程序并发能力。

Q2:PCB 的作用是什么?

答: PCB(进程控制块)是操作系统管理进程的数据结构,保存进程的 PID、运行状态、程序计数器、CPU 寄存器、内存信息和打开文件等,是进程存在和调度的依据。

Q3:什么是临界资源?为什么要加锁?

答: 临界资源是多个线程或进程共享访问的资源,例如余额、库存、数据库等。如果多个线程同时修改,会产生数据竞争,因此需要通过互斥锁等机制保证同一时刻只有一个线程访问。

Q4:死锁产生需要满足哪些条件?

答: 死锁产生必须同时满足四个条件:互斥、请求保持、不可剥夺、循环等待,只要破坏其中任意一个条件即可避免死锁。

Q5:常见的 IPC 通信方式有哪些?

答: 常见 IPC 包括管道(Pipe)、消息队列(Message Queue)、共享内存(Shared Memory)和 Socket。其中共享内存速度最快,Socket 支持跨主机网络通信,是实际开发中应用最广泛的方式之一。

wei
技术博客作者
3837 字 · 0 评论
2026-07-18

评论 (0)

暂无评论,来写第一条吧

登录后发表评论

分类

友链

关于本站

用 SpringBoot + Nuxt3 搭建的个人技术博客,记录编程之路的思考与收获。

© 2026 好啵博客 · Built with ❤️ & SpringBoot + Nuxt3