Hi!这里是 JustHappy 这是专为编程初学者准备的专栏。学了几年还分不清进程/线程/CPU线程/核心?这篇不背定义,带你把链路从"程序文件→进程→线程→系统调度→CPU执行→核心→硬件线程"一次串通:谁管资源、谁管调度、谁真在算。

我觉得这一篇《古法编程秘籍》最大的价值,不是背熟"进程是资源分配单位、线程是 CPU 调度单位"这种句子。
而是帮你第一次把这条链路搭起来: 软件世界 → 操作系统 → 硬件世界
很多人学了几年编程,还是会把下面这些东西混成一团:
进程 / 线程 / CPU 线程 / CPU 核心
但它们其实属于不同层级。你只要把层级搞清楚,概念就不会再打架
话不多说,我们开始吧!
先把三层世界摆出来
一台电脑你可以粗暴分成三层:
- 应用软件:微信、Chrome、VSCode......
- 操作系统:Windows / Linux / macOS
- 硬件:CPU、内存、硬盘(SSD)
你写的代码,最终一定要落到硬件上执行;但它不是"直接落下去"的------中间必须经过操作系统这层"翻译 + 管理 + 调度"。
程序:它一开始只是硬盘里的文件
你写下 console.log("Hello") 的时候,很容易产生一种错觉:好像代码已经在工作了。
但在真正运行之前,它本质就是磁盘里的一个文件:
- main.exe
- node.exe
- chrome.exe
这时候它还没开始跑,也没有占用你的内存,更没有"占用 CPU"。
所以更准确的说法是:
程序(Program)= 存在磁盘上的代码文件。
进程:程序一运行,就变成"一个被系统托管的实例"
当你双击打开 Chrome,操作系统会做一堆事(你看不见但它在忙):
- 把程序从硬盘加载进内存
- 给它分配内存空间
- 准备运行环境、打开必要的资源
- 建立各种系统层面的记录(方便管理)
这时候产生的就是 进程(Process)。
你可以把它理解成一句人话:
进程 = 一个正在运行的软件实例。
同一个 Chrome,你开多个窗口,可能就会有多个进程(或者至少多个进程/子进程在协作),它们都归操作系统管。
线程:进程更像"容器",真正跑代码的是线程
很多人会误以为:进程负责执行代码。
其实进程更像一个"资源容器",它拥有(或说它名下挂着)这些东西:
- 内存
- 文件句柄
- 网络连接
- 缓存
- 运行环境
但真正一行一行执行代码的,是 线程(Thread)。
所以一句最关键的对照是:
进程负责拥有资源,线程负责执行代码。
而且一个进程里可以不止一个线程。比如浏览器里常见的结构大概是:
- 渲染线程
- 网络线程
- GPU 相关线程
- JS 线程(或者多线程协作)
到这里你要牢牢记住一句话:
线程是软件概念。
CPU:它根本不认识"Chrome",它只认识指令
现在我们进入硬件世界。
CPU 其实不认识这些词:Chrome、微信、VSCode、进程......
CPU 认识的只有两类东西:
- 机器指令
- "当前要执行的那条指令属于哪个执行流"(你可以理解为:属于哪个线程)
所以从 CPU 的视角,世界长这样:
某个线程的指令 → 执行 → 再换下一个线程的指令 → 执行......
也就是说:
CPU 调度/执行的对象是线程,而不是进程。
进程更像是操作系统层面的"管理单位";线程才是"交给 CPU 跑起来的执行单位"。
操作系统:真正的调度员
很多人以为 CPU 在"管理线程",其实不是。
CPU 主要负责算。
谁先算、谁后算、算多久、被打断怎么办------这些安排工作的是操作系统。
线程们会不断地对操作系统说:我准备好了,我要运行。
操作系统维护队列、优先级、时间片、各种调度策略,然后把"下一段该执行的线程"交给 CPU。
所以三者职责可以这么记:
- 进程由操作系统管理(资源、隔离、权限等)
- 线程由操作系统调度(谁先跑、跑多久)
- CPU 负责执行(把指令真正算出来)
为啥你感觉"同时运行",但其实可能是轮流的
如果你只有一个 CPU 核心,那某一时刻它只能执行一个线程。
你看到的"微信 + Chrome + VSCode 同时在跑",更多时候其实是:
线程 A 跑一小会儿 → 暂停
线程 B 跑一小会儿 → 暂停
线程 C 跑一小会儿 → 暂停
切换速度太快,你就产生了"同时"的错觉。
真正意义上的并行,往往来自多核心:
一个核心同一时刻跑一个线程。
四核同一时刻理论上可以跑四个线程。
CPU 参数里的"线程":跟软件线程不是一回事
买 CPU 你会看到:8 核 16 线程、12 核 24 线程......
这里的"线程"说的不是你代码里创建的那种线程,而是 硬件线程(Hardware Thread) ------也就是 CPU 能同时暴露给操作系统的"硬件执行单元数量"(常见的就是超线程带来的效果)。
而你在程序里创建的,是 软件线程(Software Thread)。
它们名字相同,但层级不同:
- 软件线程:你程序能开多少个,主要看你写什么、系统允许什么(可以远大于 CPU 的线程数)
- 硬件线程:CPU 能同时提供多少个"硬件执行位",数量是固定的(比如 16)
所以经常会发生这种结构:
你创建了 1000 个软件线程
↓ 操作系统调度
映射到 16 个硬件线程(可同时看到的执行单元)
↓ CPU 真正执行
一张图把这条链路记住
这条链路你记住就够了,剩下的概念都能往里放:

最后一句话:别再把它们当成同一个东西
进程、线程、CPU 核心、CPU 线程不是"一个概念的不同说法"。
它们是从软件到硬件的不同层级的名字:
程序是文件;进程是运行实例;线程是执行流;操作系统负责调度;CPU 负责执行;核心/硬件线程决定"同一时刻能跑多少"。
把层级分清楚,你再看任何"并发/并行/多线程"资料,都不会再像玄学。