进程与线程

官官方信息技术老师·8 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

进程与线程

计算机基础面试八股 · 第 2 章 操作系统

按 空格/→ 演示下一步

问一句
1 / 8 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

进程与线程

计算机基础面试八股 · 第 2 章 操作系统

1第 1 页 · 进程与线程

进程与线程的区别与选型

进程是资源分配的单位,线程是调度的单位:要隔离用进程,要轻量并发用线程。

进程
独立地址空间与资源,崩溃互不传染
线程
共享进程资源,切换轻,通信免拷贝
共享边界
线程共享堆与全局量,栈各自私有
选型
隔离容错用多进程,并发密度用多线程
2第 2 页 · 进程与线程的区别与选型

多进程与多线程

并发的两个流派,隔离与效率各有胜负。

多进程
  • 隔离好,一个崩不连累其他
  • 创建切换与通信成本高
  • Chrome、Nginx 的选择
多线程
  • 共享内存,通信零拷贝
  • 切换轻量,并发密度高
  • 一崩全损,需锁护共享数据
隔离与效率的取舍:浏览器用进程保命,服务端用线程提效。
3第 3 页 · 多进程与多线程

进程状态与转换

三态是骨架:就绪排队等 CPU,运行正在执行,阻塞等 IO 去了另一条队伍。

三态
就绪、运行、阻塞,转换由调度与事件驱动
挂起态
内存吃紧时进程被换出到外存暂停
僵尸态
子进程退出而父进程未收割,残留退出信息
4第 4 页 · 进程状态与转换

上下文切换成本

切换不是免费的:寄存器、内核栈、缓存全要换,频繁切换吃掉算力。

直接成本
保存恢复寄存器,切换内核栈与页表
间接成本
CPU 缓存与 TLB 失效,隐性开销更大
量级感知
进程切换贵过线程,频繁切换毫秒可见
5第 5 页 · 上下文切换成本

协程与用户态调度

协程把调度搬进用户态:切换不走内核,一个线程扛起十万并发任务。

用户态切换
不进内核,保存恢复几个寄存器即完成
协作式
让出点由代码显式安排,无需内核介入
IO 挂起
遇 IO 主动让出执行权,适合 IO 密集
代表
Go goroutine、Python asyncio、Kotlin 协程
6第 6 页 · 协程与用户态调度

本节要点

  • ✓进程隔离资源,线程共享轻量
  • ✓就绪/运行/阻塞三态是骨架
  • ✓切换成本:寄存器显性,缓存隐性
  • ✓协程用户态切换,IO 密集利器
延伸主题:写个多线程计数器踩坑看看 Go 调度器 GMP
7第 7 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1浏览器为什么用多进程而不是多线程隔离标签页?

参考答案标签页跑的是不可信的第三方代码,必须硬隔离:进程崩溃或被攻破不殃及其他页面;多线程共享内存,一个越界写就全盘皆输。安全边界优先于资源效率。

2线程切换为什么比进程切换便宜?

参考答案同进程线程共享地址空间,切换不必换页表,TLB 与缓存大多保得住;进程切换要换地址空间,页表、缓存全冷,那才是开销大头。

3协程为什么不适合 CPU 密集型任务?

参考答案协程是协作式调度,让出点由代码显式安排;CPU 密集循环不让出,同一事件循环里的其他任务全被饿死。CPU 密集应交给多进程/多线程的抢占式调度。

8第 8 页 · 课后思考