首页 / 知识库 / 进大厂必备计算机基础 / 计算机操作系统原理

03 - 程序 vs 进程 vs 线程

这是面试最爱问、也最容易搞混的一组概念。别背定义,用一个类比一次讲透。

一个做菜的类比

  • 程序:一份菜谱。它只是写在纸上的一套步骤,静静躺在硬盘上,本身不干活。(比如 D 盘里的 微信.exe 文件。)
  • 进程按菜谱真正在做菜的这个过程。你把菜谱拿到厨房,备好食材、开火操作,这才「活」起来。(你双击 微信.exe,它跑起来了,就成了一个进程。)
  • 线程:厨房里同时干活的那几双手。一个大厨可以左手切菜、右手看火,多双手一起推进同一道菜。

一句话:

程序是静态的代码,进程是程序跑起来后的一次「执行活动」,线程是进程内部具体干活的执行单元。

进程:资源分配的基本单位

当程序变成进程,操作系统会给它一整套「家当」:

  • 一块独立的内存空间(放它的代码、数据、变量)
  • 打开的文件、网络连接等资源
  • 它自己的运行状态

关键点:进程之间是相互隔离的。微信进程崩了,不会连累你的浏览器进程——因为它俩住在各自独立的内存空间里,互相看不见、碰不着。这正是上一章说的「保安」在起作用。

一个进程 = 一间独立的厨房,有自己的灶台、食材、案板,别的厨房烧糊了也波及不到你。

线程:CPU 调度的基本单位

一个进程里,可以有多个线程,它们共享同一个进程的内存和资源(同一间厨房里的几双手,用的是同一批食材和灶台)。

为什么要有线程?因为很多任务可以并行推进

  • 浏览器:一个线程渲染页面,一个线程下载图片,一个线程响应你的点击——你才不会觉得卡。
  • 如果只有一双手(单线程),下载大图时整个页面就卡死不动了。

进程 vs 线程:核心区别

进程线程
是什么一次程序执行活动进程内的执行单元
内存各自独立、互相隔离同进程内共享
开销大(要分配整套资源)小(共用进程的资源)
崩溃影响一个进程崩,不连累别的进程一个线程崩,可能拖垮整个进程
通信麻烦(隔离着,要专门机制)简单(直接共享数据)

一句话记忆:

进程之间是「隔离」的,安全但沟通麻烦;线程之间是「共享」的,高效但容易互相干扰。

那个「容易互相干扰」正是麻烦的来源——多个线程共用数据,一起改就可能出乱子。这个坑我们放到第 06 章专门讲。

小结

  • 程序:躺在硬盘上的静态代码(菜谱)。
  • 进程:程序跑起来的一次执行活动(在做菜的过程),是资源分配的基本单位,进程间相互隔离。
  • 线程:进程内部干活的执行单元(几双手),是 CPU 调度的基本单位,同进程的线程共享内存。
  • 隔离带来安全,共享带来效率——这是理解并发问题的总钥匙。

下一章 → 04 - CPU 凭什么能同时跑很多程序 | 回到 README 目录