面试题答案
一键面试资源占用区别
- 多线程:线程共享进程资源,如内存空间、文件描述符等,每个线程只需额外的栈空间(一般较小,几MB)用于局部变量和函数调用,因此资源占用相对少。
- 多进程:每个进程都有独立的地址空间、数据段、代码段等,进程间数据不共享,资源占用大,创建进程时需分配大量系统资源。
上下文切换区别
- 多线程:线程上下文切换只需保存和恢复少量寄存器内容,开销小,因为线程共享进程资源,无需切换地址空间等资源。
- 多进程:进程上下文切换不仅要保存和恢复寄存器内容,还需切换内存映射、文件描述符表等,开销大,因为进程有独立资源。
策略选择
- 选择多线程策略的情况:
- 资源敏感场景:如对服务器内存使用有严格限制,需处理大量并发连接且每个连接处理逻辑相对简单,多线程因资源占用少可适应这种场景。
- 频繁通信场景:线程间共享内存,通信简单高效,若应用内各部分需频繁交互数据,多线程更合适,如多核CPU下的并行计算任务间需共享中间计算结果。
- 选择多进程策略的情况:
- 稳定性要求高场景:若某个任务异常崩溃,希望不影响其他任务运行,进程独立运行,一个进程崩溃不影响其他进程,如Web服务器中不同请求处理进程。
- 充分利用多核场景:进程可绑定到不同CPU核心,充分利用多核优势,实现真正并行处理,对于计算密集型任务,多进程更能发挥多核性能。