MST

星途 面试题库

面试题:网络编程之高并发下多线程多进程基础

在高并发网络编程场景中,简述多线程和多进程在资源占用、上下文切换方面的主要区别,并说明在何种情况下选择多线程策略,何种情况下选择多进程策略。
31.4万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

资源占用区别

  • 多线程:线程共享进程资源,如内存空间、文件描述符等,每个线程只需额外的栈空间(一般较小,几MB)用于局部变量和函数调用,因此资源占用相对少。
  • 多进程:每个进程都有独立的地址空间、数据段、代码段等,进程间数据不共享,资源占用大,创建进程时需分配大量系统资源。

上下文切换区别

  • 多线程:线程上下文切换只需保存和恢复少量寄存器内容,开销小,因为线程共享进程资源,无需切换地址空间等资源。
  • 多进程:进程上下文切换不仅要保存和恢复寄存器内容,还需切换内存映射、文件描述符表等,开销大,因为进程有独立资源。

策略选择

  • 选择多线程策略的情况
    • 资源敏感场景:如对服务器内存使用有严格限制,需处理大量并发连接且每个连接处理逻辑相对简单,多线程因资源占用少可适应这种场景。
    • 频繁通信场景:线程间共享内存,通信简单高效,若应用内各部分需频繁交互数据,多线程更合适,如多核CPU下的并行计算任务间需共享中间计算结果。
  • 选择多进程策略的情况
    • 稳定性要求高场景:若某个任务异常崩溃,希望不影响其他任务运行,进程独立运行,一个进程崩溃不影响其他进程,如Web服务器中不同请求处理进程。
    • 充分利用多核场景:进程可绑定到不同CPU核心,充分利用多核优势,实现真正并行处理,对于计算密集型任务,多进程更能发挥多核性能。