🟩1. 什么是进程
进程(Process) 是程序的一次运行实例。 比如你打开一个浏览器,操作系统就会给它分配独立的内存空间、资源等,这就是一个进程。
进程的特点
- 操作系统资源分配的基本单位
- 每个进程都有自己独立的内存空间和资源
- 进程之间默认相互隔离,互不影响。一个进程崩溃,通常不会直接影响别的进程
什么是线程
线程(Thread) 是进程中的一个执行单元。 一个进程里可以有一个线程,也可以有多个线程。
例如浏览器进程中通常有:
- 渲染线程
- JS 引擎线程
- 网络请求线程
- 定时器触发线程
线程的特点
- CPU调度执行的基本单位
- 线程依附于进程存在,不能单独存在
- 同一个进程内的线程共享进程的内存空间和资源
- 线程切换开销远小于进程(因为共享内存,无需重新分配资源)
🟩3. 进程和线程的区别
性质---通信---开销 内存空间不同---稳定
(1)基本性质不同
- 进程:资源分配的基本单位
- 线程:CPU 调度的基本单位
(2)通信方式不同
-
进程通信复杂,需通过 IPC 机制:
-
管道、消息队列、共享内存、Socket 等
-
线程通信简单,直接读写共享内存即可,但要注意线程安全
(3)开销不同
- 进程创建、销毁、切换开销大
- 线程更轻量,切换成本低
(4)内存空间不同
- 进程之间内存独立、互不干扰
- 同一进程内线程共享内存空间
(5)稳定性不同
- 一个进程崩溃,一般不影响其他进程
- 一个线程崩溃,通常会导致整个进程一起崩溃
🟩4. 举个简单例子
比如你打开微信和浏览器:
- 微信是一个进程
- 浏览器是一个进程
浏览器内部可能还有多个线程:
- 一个线程负责页面渲染
- 一个线程负责执行 JS
- 一个线程负责网络请求
所以可以说:
- 进程像一个工厂
- 线程像工厂里的工人
- 工厂提供场地、资源
- 工人负责具体执行任务
🟩6. 多线程的问题
虽然线程共享数据更高效,但也带来问题:
- 线程安全问题
- 数据不一致
- 死锁
- 竞争条件
所以多线程编程通常要配合:
- 锁
- 信号量
- 互斥量
- 条件变量
🟩7. 面试精简回答版
进程是程序运行后的实例,是操作系统分配资源的基本单位;线程是进程中的执行单元,是 CPU 调度的基本单位。 一个进程可以包含多个线程,进程之间内存独立,线程之间共享同一进程的内存和资源。 进程更稳定,但创建和切换开销大;线程更轻量,执行效率高,但容易出现线程安全问题。