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

2026-07-18wei👁 51 阅读9 分钟阅读📝 3016 字💬 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=1001PID=1002

Linux:

bash
ps -ef

可以看到 PID。


② 进程状态

例如:

运行等待阻塞

③ 程序计数器(PC)

记录:

CPU执行到哪一条指令。

切换回来继续执行。


④ CPU寄存器

保存:

CPU现场。

例如:

AXBXCXDX

⑤ 内存信息

例如:

代码区数据区

⑥ 打开的文件

例如:

a.txtb.jpgsocket连接

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

经典五状态模型。

            创建         就绪 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)

多个进程:

QQIDEAChrome微信

CPU:

到底先执行谁?

由:

CPU调度算法

决定。


八、时间片(Time Slice)

时间片:

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

例如:

10ms

流程:

QQChromeIDEA微信QQ

由于速度很快:

用户感觉:

像同时运行。

这就是:

时间片轮转。


九、优先级(Priority)

有些程序:

更重要。

例如:

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

CPU:

优先执行:

优先级高的程序。

例如:

Priority=10Priority=1

CPU:

先执行10。


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

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

实际系统:

通常组合使用。


十一、并发(Concurrency)

并发:

多个任务:

交替执行。

例如:

QQIDEAChromeQQ

注意:

不是同时。

而是:

快速切换。


并行(Parallel)

多个CPU:

真正同时执行。

例如:

CPU1QQCPU2Chrome

并发 vs 并行

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

十二、临界资源(Critical Resource)

多个线程:

共同访问:

同一个资源。

例如:

余额库存数据库打印机

这就是:

临界资源。


为什么危险?

例如:

余额:

100元

线程A:

取50

线程B:

取30

如果同时操作:

可能得到:

205070

结果错误。

这就是:

数据竞争(Race Condition)。


十三、互斥(Mutex)

互斥:

同一时刻:

只能一个线程访问。

例如:

厕所。

有人锁门别人等待

程序:

线程A加锁操作解锁

其他线程:

等待。


常见互斥工具

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

十四、同步(Synchronization)

同步:

线程之间:

按顺序执行。

例如:

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

必须:

A完成,

B才能开始。


常见同步工具

Java:

wait()notify()CountDownLatchSemaphoreCondition

Linux:

SemaphoreMutexCondition Variable

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

什么是死锁?

两个线程:

互相等待。

谁也不能继续。

例如:

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

最终:

一直等待。

程序卡死。


四个产生条件(必背)

必须同时满足:

① 互斥

资源只能一个人使用。


② 请求保持

拿着资源,

继续申请新的资源。


③ 不可剥夺

资源不能强制抢走。


④ 循环等待

形成等待环。

例如:

A等BB等CC等A

口诀:

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


十六、如何避免死锁?

常见方法:

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

统一:

先锁A后锁B

不要:

A→BB→A

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

避免:

边申请边等待。


方法三:设置超时

例如:

Java:

java
tryLock(3, TimeUnit.SECONDS);

超时:

放弃锁。


方法四:减少锁

锁越少,

死锁概率越低。


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

不同进程:

内存独立。

因此:

不能直接共享变量。

需要:

IPC(进程间通信)


十八、管道(Pipe)

特点:

最简单。

进程APipe进程B

特点:

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

例如:

bash
ls | grep txt

就是:

管道。


十九、消息队列(Message Queue)

通过:

消息。

发送消息队列接收

优点:

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

例如:

订单系统MQ库存系统

常见:

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

二十、共享内存(Shared Memory)

多个进程:

共享:

同一块内存。

A共享内存B

优点:

速度最快。

缺点:

必须加锁。

否则:

数据混乱。


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

Socket:

网络通信。

不仅:

进程通信。

还能:

跨机器通信。

例如:

浏览器SocketWeb服务器

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
技术博客作者
3016 字 · 0 评论
2026-07-18

评论 (0)

暂无评论,来写第一条吧

登录后发表评论