进程的描述与控制
2025/12/3大约 2 分钟
第3章 进程的描述与控制
进程与线程的区别是什么?
- 进程是资源分配的最小单位,拥有独立内存
- 线程是 CPU 调度的最小单位,共享进程内存
- 进程切换开销大,线程切换开销小
- 线程共享内存需要同步控制
为什么线程切换比进程切换快?
- 不需要切换页表和文件描述符等重资源
- 线程共享进程地址空间,只需切换寄存器等少量状态
- 进程切换涉及更多内核数据结构恢复
进程和线程的区别是什么?
- 进程是资源分配单位,有独立内存空间
- 线程是调度单位,共享进程资源
- 进程切换开销大;线程切换开销小
- 一个进程崩溃不会影响其他进程,但线程会影响同进程所有线程
为什么要有线程?
- 线程更轻量,创建/上下文切换成本低
- 更适合 并发、IO 密集、CPU 多核利用
- 提高程序响应性(UI 主线程 / 工作线程)
什么是僵尸进程与孤儿进程?
- 僵尸进程:子进程结束但父未 wait → 占用进程表项
- 孤儿进程:父进程结束但子还在 → 被 init 接管
- 僵尸进程过多会耗尽 PID 资源
进程间通信(IPC)方式有哪些?用在哪里?
- 管道:父子进程通信
- 消息队列:结构化消息
- 共享内存:最快,但需同步
- 信号量:同步
- 信号:事件通知
- Socket:跨机器通信(如微服务)
线程间通信方式有哪些?
- 锁(synchronized、ReentrantLock)
- 条件变量(Condition)
- 信号量(Semaphore)
- wait/notify
- 原子类(AtomicInteger)
- ThreadLocal(不共享数据)
线程安全如何保证?
- 互斥锁(synchronized/Lock)
- CAS + 原子类
- 读写锁
- ThreadLocal
- 不可变对象(final)
什么是线程安全?如何保证?
- 多线程访问共享变量时结果正确
- 互斥锁
- 读写锁
- CAS + 原子类
- 不可变对象
- ThreadLocal