嵌入式Linux岗位的常见基础面试题。重点是把独立地址空间、线程共享资源和同步风险解释清楚。
面试回答的核心一个进程一般有独立的虚拟地址空间;同一进程中的多个线程共享地址空间及若干进程资源,但各自有程序计数器、寄存器状态和线程栈。
01进程与线程的资源边界
普通情况下,不同进程拥有各自虚拟地址空间,需要IPC来交换数据;同一进程的多个线程共享代码区、全局数据、堆和文件描述符表等资源,各线程有自己的执行栈、线程局部数据和CPU执行上下文。共享范围也取决于系统调用和创建参数。
02效率不是唯一选择标准
线程共享内存,线程间传递数据可以避免部分跨进程IPC开销,创建与上下文切换往往更轻量;但多线程同时读写共享变量时会出现竞争、死锁、可见性与生命周期问题。不同进程的隔离性通常更强,故障容错也更容易按进程边界设计。
03在Linux里怎么验证
可以用ps、top -H、/proc或线程调试工具观察进程与LWP/TID;用互斥锁、条件变量、原子操作等建立同步,并结合性能指标验证线程调度是否满足实时性。不是“CPU 100%就一定要多开线程”。
04面试参考回答
“进程侧重资源隔离,线程侧重同一地址空间内的并发执行。多线程常降低数据共享成本,但需要锁和同步机制。我会根据隔离、实时性、内存开销、通信量与故障边界选择进程或线程。”
不要说“线程没有自己的内存”。线程通常有各自的栈与线程本地存储;也不要把“多线程”直接等同于“所有任务都会跑得更快”。
追问两个线程同时修改同一个计数器,为什么最终结果可能小于预期?怎么避免?

扫码关注





























