当前位置: 首页 > news >正文

Java高频面试之并发编程-02

hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶

面试官:进程和线程的区别是什么?


1. 资源分配与独立性
  • 进程

    • 独立性:每个进程拥有独立的内存空间(堆、栈、数据段)和系统资源(文件句柄、网络连接)。
    • 资源分配:操作系统分配资源的最小单位,进程间互不干扰。
    • 类比:类似电脑上同时运行的多个独立应用(如浏览器和音乐播放器)。
  • 线程

    • 共享性:同一进程内的线程共享进程的内存和资源(如全局变量、文件描述符)。
    • 轻量化:线程仅独立拥有栈和寄存器,创建和切换成本低。
    • 类比:同一工厂内的多个工人协作完成生产任务。

2. 切换开销
  • 进程切换

    • 需要切换内存空间、文件描述符等资源,涉及 内核态切换,开销大(通常微秒级)。
    • 例如:从浏览器切换到音乐播放器时,操作系统需更新页表、寄存器等。
  • 线程切换

    • 仅切换栈和寄存器,开销小(通常纳秒级)。
    • 例如:同一应用内的多个标签页切换任务。

3. 通信方式
  • 进程间通信(IPC)

    • 复杂:需通过 管道、消息队列、共享内存、信号量、Socket 等机制。
    • 安全性:操作系统强制隔离,避免数据污染(如银行系统与支付系统独立运行)。
  • 线程间通信

    • 直接共享内存:通过全局变量或共享对象快速交互(如多线程更新同一缓存)。
    • 风险:需通过锁、CAS 等机制避免竞态条件(如 synchronized 关键字)。

4. 稳定性与容错性
  • 进程

    • 高容错:一个进程崩溃不会影响其他进程(如 Chrome 标签页崩溃不影响 Word)。
  • 线程

    • 低容错:线程崩溃可能导致整个进程终止(如 Java 线程未捕获异常引发 JVM 退出)。

5. 创建与销毁
  • 进程

    • 高成本:需分配独立内存、加载程序代码,耗时较长(如启动一个 Python 脚本)。
    • 例如:Linux 中通过 fork() 创建子进程。
  • 线程

    • 低成本:复用进程资源,创建速度快(如 Java 中 new Thread().start())。

扩展:协程(Coroutine)

  • 定义:用户态的轻量级线程,由开发者显式调度(如 Kotlin 协程、Python 的 asyncio)。
  • 优势
    • 单线程内实现高并发(如处理 10 万网络连接)。
    • 无内核切换开销,性能更高。
  • 对比
    • 协程 vs 线程:协程切换不涉及内核,适合 IO 密集型任务;线程依赖内核调度,适合 CPU 密集型任务。

总结对比表

维度进程线程
资源独立性完全独立共享进程资源
切换开销高(内核态切换)低(用户态切换)
通信方式IPC 机制(管道、Socket 等)共享内存(需同步控制)
容错性高(独立崩溃)低(影响整个进程)
创建成本高(需分配独立资源)低(复用进程资源)
典型应用多任务操作系统、分布式系统高并发服务(如 Web 服务器)

应用建议

  • 选择进程:需高隔离性、稳定性(如金融系统模块)。
  • 选择线程:需高效协作、资源共享(如实时数据处理)。
  • 选择协程:需极致并发性能(如微服务网关、高频 IO 操作)。

在这里插入图片描述

相关文章:

  • 自建网站该页无法显示优帮云排名优化
  • 我的世界做神器指令网站百度seo免费推广教程
  • 辽源网站制作如何做品牌运营与推广
  • 卖自己做的网站去哪腾讯网qq网站
  • 在百度上做网站怎么做品牌营销策略分析
  • html做的好看的网站b站推广渠道
  • MySQL 主从复制:数据库的克隆军团
  • ArcGIS/ArcGIS Pro地震分析:为什么缅甸地震,我国瑞丽震感最强烈?
  • 使用MetaGPT 创建智能体(1)入门
  • rbpf虚拟机-阶段整理
  • AVR128单片机密码锁
  • Flink在双流Join中,window如何选择
  • 【HCIA】静态综合实验练习笔记
  • JavaEE初阶复习(JVM篇)
  • 软考中级电子商务设计师分值分布解析!附最新备考资源!
  • Spark,上传文件
  • Spring | Spring、Spring MVC 和 Spring Boot 的区别
  • IntelliJ IDEA 2024.1.4 (Ultimate Edition)找不到Add Framework Support解决方法
  • 【diffusers 进阶(十五)】dataset 工具,Parquet和Arrow 数据文件格式,load dataset 方法
  • XT1870 同步升压 DC-DC 变换器
  • WebView加载URL时添加时间戳可以防止缓存问题方案
  • ceph数据迁移数据迁移与bacula配置调整优化实战
  • WindTerm快速更改主密码
  • Nextjs15 实战 - React Notes 项目初始化
  • Java学习总结-字符流
  • 通过案例初步认识机器学习