一、核心真理
进程 = 独立大房子 线程 = 房子里的住户 一个房子里可以住很多住户(多线程) 住户共享客厅 / 厨房(全局数据),各有自己的小房间(私有栈)
二、官方定义
1. 什么是线程?
线程是 进程内部的最小执行单元 一个进程里可以创建 多个线程,它们:
- 共享进程的内存、文件描述符、全局变量、资源
- 各自独立跑自己的代码流
2. 操作系统本质
CPU 调度最小单位:线程 资源分配最小单位:进程
三、进程 VS 线程
| 对比项 | 进程 | 线程 |
|---|---|---|
| 资源隔离 | 完全独立,互不干扰 | 共享同一个进程资源 |
| 创建开销 | 极大(复制整个地址空间) | 极小(只建栈 + PCB) |
| 通信方式 | 麻烦:管道 / 共享内存 / 信号量 | 直接读全局变量就通信 |
| 崩溃影响 | 一个崩,不影响别的 | 一个线程崩 → 整个进程全崩 |
| 切换速度 | 慢 | 飞快 |
人话总结:
- 开进程 = 重新盖一栋楼
- 开线程 = 楼里多雇一个员工干活
四、单线程 / 多线程 是什么?
1. 单线程程序
你写的普通 C 语言程序:
- 整个进程里 只有一条代码执行流
- 从上往下顺序跑
2. 多线程程序
一个进程里:
- 同时有多条代码流 并发跑
- 一起用同一份全局数据
- 各自做不同任务
例子:
- 聊天软件:一个线程收消息,一个线程发消息,一个线程弹窗
- 服务器:一个线程处理一个客户端连接
五、线程共享什么?独有什么?
✅ 所有线程共享(大家都能改)
- 全局变量
- 堆内存(malloc/new)
- 文件描述符(打开的文件、socket)
- 进程 ID、工作目录、权限
- 信号处理方式
✅ 每个线程独有(自己私人)
- 栈空间(局部变量、函数参数)
- 线程私有寄存器(CPU 调度用)
- 线程 ID
- 私有信号屏蔽字
六、多线程优缺点
优点
- 创建、销毁、切换 超快
- 线程间通信 极简(直接读全局变量)
- 充分利用多核 CPU,并发效率高
- 资源共享,节省内存
缺点
- 全局数据要加锁(不然乱改→数据错乱)
- 一个线程崩溃 → 整个进程挂掉
- 逻辑复杂,容易死锁
七、CPU 怎么执行多线程?
并发(单核)
快速轮流切换线程,肉眼看起来像同时跑
并行(多核)
多个线程 真・同时 在不同核心跑
八、Linux 下线程特点
- Linux 内部:线程本质是 轻量级进程 LWP
- pthread 库:POSIX 标准线程(跨平台)
- 常用函数:
pthread_create创建pthread_join等待回收pthread_exit退出pthread_mutex互斥锁
九、最经典一句总结
- 进程是资源分配单位,线程是调度执行单位
- 多进程隔离安全,多线程共享高效
- 线程共享堆、全局区;独有栈、局部变量
十、安装线程man page 命令
sudo apt-get install manpages-posix-dev
查看指定线程的LWP号:
线程号和线程ID是有区别的
线程号是给内核看的
查看方式
找到程序的进程ID
ps -Lf pid