进程是"资源分配的最小单位",
线程是"CPU 调度的最小单位"。
在内核里,只有结构体,没有概念。
比如,在32为操作系统中,一个进程的虚拟内存为4GB,这就是一个进程。进程是一个资源容器+至少一个线程。
Linux 中的"PCB"就是 task_struct 。
这是一个内核级结构体 ,Linux 里进程和线程本质上都是 task_struct(线程 = 共享资源的 task)。
-
定义在:
include/linux/sched.h -
一个 task_struct = 一个可调度实体
-
进程 / 线程 没有结构体区别
- 区别在于 是否共享资源
你可以把它理解成 5 大块信息:
task_struct
├── 1. 进程状态 & 调度信息
├── 2. 标识信息(PID / TGID)
├── 3. 内存管理(mm)
├── 4. 文件系统 & IO
├── 5. 关系 & 信号 & 安全
进程: 是资源分配与隔离的基本单位,
拥有独立的虚拟地址空间和系统资源;
线程: 是 CPU 调度的最小单位,只保存执行上下文,
多个线程共享进程的资源。
因此线程切换比进程切换开销小,但并发安全问题更复杂。