进程与线程
1. 什么是进程
2. 什么是线程
3. 区别
答:
1. 进程是对正在运行中的程序的一个抽象,是系统进行资源分配和调度的基本单位
操作系统的其他所有内容都是围绕着进程展开的,负责执行这些任务的是CPU
进程是一种抽象的概念,从来没有统一的标准定义,一般由程序、数据集合和进程控制块三部分组成:
- 线程(thread)是操作系统能够进行运算调度的最小单位,其是进程中的一个执行任务(控制单元),负责当前进程中程序的执行
一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步
但实际上,并不是线程越多,进程的工作效率越高,这是因为在一个进程内,不管你创建了多少线程,它们总是被限定在一颗CPU内,或者多核CPU的一个核内
多线程在宏观上是并行的,在微观上则是分时切换串行的,多线程编程无法充分发挥多核计算资源的优势
3. 区别
补充
补充:进程(process)是资源分配的基本单位,线程(thread)是 CPU 调度的基本单位,前者拥有独立内存空间,后者共享所属进程的内存。
关键对比:
- 内存:进程之间相互隔离;同一进程的线程共享堆内存和方法区,但有自己的栈和程序计数器。
- 开销:进程创建 / 切换开销大(需要切换页表、内核资源);线程切换只需保存少量寄存器和栈,开销小。
- 通信:进程间通信(IPC)需要管道、消息队列、共享内存、socket 等;线程可直接读写共享变量,但需要锁 / 信号量避免竞态。
- 稳定性:进程隔离性好,一个进程崩溃不会直接影响其他进程;线程出问题(如死锁)可能让整个进程挂掉。
- 并行:多进程可以利用多核;多线程在单核上分时切换,多核下才能真正并行。
补充:浏览器里的线程模型:
- 一个 Tab 页面是一个渲染进程(多进程架构)。
- 渲染进程内:JS 主线程(执行代码)、GUI 渲染线程(布局 / 绘制)、事件触发线程、定时器线程、异步 HTTP 请求线程。
- JS 主线程与 GUI 渲染线程互斥,所以 JS 长任务会阻塞渲染。
- 解决方案:
requestAnimationFrame、requestIdleCallback、Web Worker、Scheduler.yield()。



