操作系统面试核心:进程和线程到底有什么区别?

进程和线程是操作系统面试的基础。

核心区别

特性 进程 线程
资源 独立的内存空间 共享进程的内存
创建开销 大(分配内存、复制页表)
通信 IPC(管道、共享内存等) 直接读写共享变量
切换开销 大(切换页表、刷新 TLB)
独立性 一个挂了不影响其他 一个线程 OOM,整个进程挂
调度 操作系统调度 操作系统调度(内核线程)

进程间通信(IPC)

  1. 管道:父子进程间单向通信,ps aux | grep java
  2. 消息队列:独立于进程,异步通信
  3. 共享内存:最快但需要同步机制
  4. Socket:跨网络通信

线程同步

synchronized(Java)

synchronized 保证原子性 + 可见性 + 有序性。JMM 的 happens-before 原则:解锁 happens-before 后续的加锁。

volatile

保证可见性 + 有序性(禁止指令重排),但不保证原子性。经典使用:DCL 单例中的 instance 变量必须用 volatile。

CAS(Compare And Swap)

无锁同步。AtomicInteger 底层就是 CAS + 自旋。ABA 问题:值从 A 变成 B 又变成 A,CAS 检测不到变化。解决:加版本号(AtomicStampedReference)。

死锁的条件

  1. 互斥:资源不能共享
  2. 持有并等待:持有资源的同时等待新资源
  3. 不可剥夺:别人不能抢你的资源
  4. 循环等待:A 等 B,B 等 C,C 等 A

破坏任意一个即可避免死锁。

面试话术

进程是资源分配的最小单位,线程是 CPU 调度的最小单位。进程间通信需要 IPC,线程间直接共享内存但需要同步。线程同步的核心是保证原子性、可见性和有序性。

OS 基础决定了你能走多远——优化到最后都是在跟操作系统打交道。

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。