【Java面试题】多进程及多线程的区别?

线程与进程的区别如下:

  1. 进程是资源分配的最小单位,线程是资源调度的最小单位。
  2. 线程是在进程下运行的。一个进程可以包含多个线程。
  3. 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间。而线程是共享进程中的数据的,使用相同的地址空间。
  4. 同一进程下不同线程间数据容易共享,不同进程间数据很难共享。
  5. 线程之间没有单独的地址空间,一个线程死掉,整个进程也死掉。而一个进程死掉并不会对另外一个进程造成影响。
区别 进程 线程
根本区别 作为资源分配的单位 调度和执行的单位
开销 每个进程都有独立的代码和数据空间(进程上下文),进程间的切换开销大 同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器PC,线程的切换开销小(部分寄存器)
所处环境 OS中能同时运行多个任务/程序 同一个应用程序中有多个顺序流同时执行
分配内存 系统在运行时会为每个进程分配不同的内存区域 除了CPU外,不会为线程分配内存,只能共享那个所在线程的资源,拥有相同的地址空间
包含关系 没有线程的进程可以被视为单线程的,如果一个进程拥有多个线程,则执行过程不是一条直线的,而是多条线共同完成 线程是进程的一部分,所以线程被称为轻权或轻量级进程

多线程的优点:

  • 无需跨进程边界;

  • 程序逻辑和控制方式简单;

  • 所有线程可以直接共享内存和变量;

  • 线程方式消耗的总资源比进程少

多进程的优点

  • 每个进程相互独立,不影响主程序的稳定性,子进程崩溃没关系;

  • 通过增加CPU就可以容易扩充性能;

  • 可以尽量减少线程加锁/解锁的影响,极大提高性能;

多线程的缺点

  • 每条线程与主程序共用地址空间,大小受限;

  • 线程之间的同步和加锁比较麻烦;

  • 一个线程的崩溃可能影响到整个程序的稳定性;

  • 到达一定的线程数后,即使在增加CPU也无法提高性能;

多进程的缺点:

  • 逻辑控制复杂,需要和主程序交互;

  • 需要跨进程边界,如果有大数据传输,不适合;

  • 多进程调度开销比较大

相关推荐
油丶酸萝卜别吃1 小时前
utils.js 说明文档
开发语言·javascript·ecmascript
rannn_1114 小时前
【力扣hot100】链表专题|160、206、234、141、142
java·算法·leetcode·链表·面试·开发
leisoo80974 小时前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan20224 小时前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
不会代码的小猴5 小时前
21. 泛型编程上
开发语言·c++·笔记·算法
IKUN家族5 小时前
Spring IoC&DI
java·spring·rpc
一只旭宝6 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
金銀銅鐵7 小时前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
山荷枝7 小时前
03-框架--Spring
java·后端·spring
ChaHae-In7 小时前
SpringBoot统一功能处理
java·spring boot·后端