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

并发与并行的本质区别与实战应用解析

🧠 并发(Concurrency) vs 并行(Parallelism)

对比项并发(Concurrency)并行(Parallelism)
定义同一时间段多个任务交替执行,宏观上“同时进行”多个任务真正同时执行
资源使用一个核也可以实现(通过时间片轮转)必须多个核(多线程或多进程同时运行)
类比一位厨师炒多道菜(轮流翻锅)多位厨师同时炒菜(每人一锅)
编程角度更多涉及线程调度、共享资源管理更多涉及多线程/多进程计算密集任务分配
实现成本相对低(比如线程池 + IO 密集型任务)成本高,需要 CPU 核心支持,适合计算密集型任务
应用场景Web 服务、数据库连接池、爬虫等 IO 密集型任务图像处理、大数据计算、科学计算等 CPU 密集型任务

在这里插入图片描述


🎯 打个通俗类比:炒菜场景

  • 并发:一个厨师炒五个菜,每次翻一下这锅、翻一下那锅,最终每锅都炒完了——这是并发
  • 并行:五个厨师,每人一锅,同时炒五道菜——这是并行

👨‍💻 Java 角度解析(含图示)

并发:使用线程池处理 IO 请求(交替切换执行)
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() -> fetchData());
executor.submit(() -> writeToFile());
并行:使用 ForkJoinPoolparallelStream 并行执行任务
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
numbers.parallelStream().forEach(System.out::println);

📈 Mermaid 图示:并发 vs 并行执行流程

CPU 核心1 CPU 核心2 任务A 任务B 执行部分 切换并执行部分 再次切换回来执行 同一核心,任务轮流交替 并行执行 并行执行 多核心同时执行各自任务 CPU 核心1 CPU 核心2 任务A 任务B

🧩 面试延伸:深入提问点

  1. Java 怎么实现并发与并行?

    • 并发:线程池(如 ThreadPoolExecutor)、异步任务(CompletableFuture)
    • 并行:ForkJoinPoolparallelStreamParallelArray(JDK7)
  2. 线程多就能并行吗?

    • ❌ 不一定,只有在 多核 CPU + 正确线程调度 + 无资源抢占冲突 的情况下才能实现并行。
    • 多线程只是并发的基础设施,不代表必然并行。
  3. 并发一定比并行慢吗?

    • 也不一定,IO 密集型任务中,并发更节省资源和开销,反而更快更稳

相关文章:

  • Python设计模式:MVC模式
  • 如何检测Python项目哪些依赖库没有使用
  • Spring—循环依赖与三级缓存
  • 双模对讲机与单模对讲机:技术革新与通信效能的深度解析
  • STM32F103C8T6 GPIO 通讯原理与物理层解析
  • 第二章 安全认证
  • centos7使用certbot完成nginx ssl证书续期
  • Linux编译器-gcc/g++使用
  • 【hexo主题自定义】
  • OpenFeign和Gateway
  • Android Build Variants(构建变体)详解
  • NEWport太阳光模拟器与AVANTES光谱仪与太阳能模拟器光谱匹配度检测应用
  • 【UVM项目实战】异步fifo—uvm项目结构以及uvm环境搭建
  • Unity性能优化实战:用Profiler揪出卡顿元凶 (CPU/GPU/内存/GC全面解析) (Day 37)
  • java延迟map, 自定义延迟map, 过期清理map,map能力扩展。如何设置map数据过期,改造map适配数据过期
  • 2024浙江省赛A Bingo
  • AGP8+ fullMode 完全模式混淆闪退
  • 长城智驾重复造轮子
  • TIM输入捕获知识部分
  • 77. 组合
  • 咖啡与乳腺健康之间,究竟有着怎样的复杂关系?
  • 青海一只人工繁育秃鹫雏鸟破壳后脱险成活,有望填补国内空白
  • 王毅会见瑞士联邦委员兼外长卡西斯
  • 东阿至聊城公交票价取消八折优惠:运行成本高昂
  • 世卫发布预防少女怀孕新指南,呼吁终止童婚、延长女孩受教育时间
  • 云南大理州洱源县发生4.8级地震,震源深度10千米