进程与线程
进程组织地址空间与资源,线程表示其中的一条执行路径。本文以常见 Linux 进程和内核线程为背景,区分资源隔离、共享数据、调度与上下文切换。
1. 面试核心
先记住这几条,再读正文- 同一进程的线程共享地址空间和文件描述符等资源,各自保留寄存器状态和栈。
- 并发表示任务交替推进,并行表示多个执行单元同时工作。
- 增加线程可以利用多核或隐藏等待,也会增加调度、栈空间和竞争成本。
2. 资源与执行状态
两个进程可以把同一个虚拟地址映射到不同物理内存,默认不能直接读写对方的普通内存。同一进程的线程则可以访问相同全局变量和堆对象,因此通信方便,但必须协调并发读写。
线程各有自己的栈,不代表其他线程从硬件上无法访问那块栈内存;它们仍处于同一地址空间。把栈上对象地址交给另一个线程,还要处理生命周期和同步。
3. 调度与上下文切换
处于运行状态的线程可能因时间片耗尽、被更高优先级任务抢占或等待 I/O、锁而让出 CPU。调度器选择可运行任务,恢复寄存器等上下文后继续执行。
同进程线程切换通常不需要更换地址空间,但仍有寄存器保存、调度和缓存局部性损失。跨进程切换涉及地址空间切换,其具体成本受硬件、TLB 标识和工作集影响,不能给出固定倍数。
系统调用会进入内核态,但不一定切换到另一个线程;它可能在原线程上下文内完成后返回。
4. 使用边界
需要故障隔离、权限隔离或独立部署时,进程通常更合适;需要低成本共享数据时,可以使用线程。进程间共享内存仍需同步,不能把多进程直接等同于完全没有数据竞争。
CPU 密集任务的并行度首先受可用核数限制;I/O 密集任务可以使用更多并发隐藏等待,但最终受下游容量约束。线程越多,排队、上下文切换和内存占用也可能越高。
5 · 面试题卡片
先想答案,再翻面题目来自公开面经。点任意一张进入翻卡,可左右切换,看完回到这里。
逐张翻看 1 张 →5.1 进程与线程有什么区别,线程共享资源会带来哪些影响?
出现公司:字节跳动
考察重点:资源隔离与共享范围、执行状态和并发访问风险。
参考回答
进程提供资源与地址空间边界;线程在进程内执行,共享堆、全局变量和文件描述符,各自保存执行状态与栈。共享让通信更直接,也让并发写入和内存破坏影响同一进程。选择时比较隔离需求、通信方式与调度成本,不能只用“线程更轻”决定。