面试中常被问到的(17)多线程及多进程优缺点

Posted AllenSquirrel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试中常被问到的(17)多线程及多进程优缺点相关的知识,希望对你有一定的参考价值。

  • 多进程:

优点:

  1. 进程资源相互独立,互不干扰,子程序崩溃不影响主程序的稳定性。进程比较稳定健壮
  2. 通过增加cpu核心数,可以很容易扩充性能
  3. 尽量减少线程加锁解锁的影响,极大提高性能
  4. 每一个进程可以获得本地全部地址空间和相关资源,性能上限很大

缺点:

  1. 逻辑控制复杂,需要与主程序进行交互
  2. 需要跨进程边界,对大量数据传输不友好,适合小数据量传输,密集运算会导致调度开销增大
  3. 单cpu轮询并发处理,多cpu并行处理
  4. 多线程与多进程结合,每一个cpu开启一个子进程,每一个子进程开启若干同类型数据进行处理。
  • 多线程:

优点:

  1. 无需跨进程边界进行数据传输,通信更便捷(包含进程间通信方式在内的以及全局变量,函数传参)
  2. 程序逻辑和控制方式简单
  3. 所有线程直接共享同一内存地址空间和资源
  4. 线程总资源消耗比线程少(创建销毁成本低,调度成本低)

缺点:

  1. 每个线程与主程序共用地址空间,受限于本地内存空间大小
  2. 线程之间由于共享同一资源,对于资源访问必须需要加锁控制,线程间同步和加锁控制操作麻烦
  3. 一个线程的崩溃可能影响整个程序的稳定性
  4. 线程不是越多越好,cpu资源固定,线程数过多会增加线程切换调度成本

总结:

多进程的优势在于cpu核心数,及资源数量,适用于cpu密集型工作环境

多线程的优势在于切换代价小,适用于IO密集型工作环境涉及频繁IO阻塞导致的线程切换

以上是关于面试中常被问到的(17)多线程及多进程优缺点的主要内容,如果未能解决你的问题,请参考以下文章

面试中常被问到的(18)父子进程,孤儿进程及僵尸进程

面试中常被问到的(15)死锁发生及解决

面试中常被问到(12)进程与线程的区别

面试中常被问到的(19)常见几种锁

深度分析!面试99%被问到的多线程和并发篇,看完你就懂了

去年去阿里面试,被问到java 多线程,我是这样手撕面试官的