JAVA|智能仿真并发项目-并行与并发

文章目录

一、核心定义

概念 核心定义 比喻
并发(Concurrency) 同一时间段内处理多个任务(任务交替执行,CPU 核心数 ≤ 任务数) 一个厨师同时处理点餐、炒菜、出餐:先炒两口菜,停下来接订单,再回去炒菜(交替做)
并行(Parallelism) 同一时刻执行多个任务(任务同时执行,CPU 核心数 ≥ 任务数) 两个厨师同时炒菜,一个炒番茄炒蛋,一个炒青椒肉丝(同时做)

补充:

  • 并发的核心是任务切换(CPU 时间片轮转),看似 "同时"(宏观),实则 "交替"(微观)
  • 并行的核心是任务同时执行,依赖多核 CPU 硬件支持
  • 并发是 "处理多任务的能力",并行是 "同时执行多任务的状态"

二、底层原理

1. 并发的实现原理(单核 CPU 场景)

单核 CPU 无法真正并行执行多个线程,只能通过时间片轮转调度算法实现并发:

  1. CPU 给每个线程分配极短的时间片(如 10ms)
  2. 线程 A 执行 10ms 后,CPU 保存线程 A 的上下文(执行状态),切换到线程 B
  3. 线程 B 执行 10ms 后,再切换回线程 A,恢复上下文继续执行
  4. 由于切换速度极快(纳秒级),人类宏观感知上像 "同时执行"

2. 并行的实现原理(多核 CPU 场景)

多核 CPU 中,不同核心可以同时执行不同线程:

  • 线程 A 在 CPU 核心 1 执行,线程 B 在 CPU 核心 2 执行
  • 两个线程无切换,真正 "同时" 运行,效率更高
  • 多核 CPU 中,既可以有并发(同一核心交替执行多任务),也可以有并行(多核心同时执行多任务)

三、适用场景

场景类型 推荐 原因
IO 密集型任务(如网络请求、文件读写) 并发 任务大部分时间在等待 IO,CPU 空闲时可切换执行其他任务,提升吞吐量
CPU 密集型任务(如大数据计算、数值运算) 并行 任务需要持续占用 CPU,多核并行可避免上下文切换,大幅缩短总耗时
任务间有依赖关系(如任务 B 依赖任务 A 的结果) 并发 无法并行执行,只能通过并发调度顺序执行
任务间完全独立(如多个独立的计算任务) 并行 多核同时执行,效率最大化

注意:只有在CPU多核情况下才能提高效率,单核情况下依旧是轮流执行

四、总结

  1. 核心区别:并发是 "交替处理多任务"(单核),并行是 "同时执行多任务"(多核)
  2. 底层支撑:并发依赖 CPU 时间片轮转,并行依赖多核硬件
相关推荐
磊磊落落1 小时前
如何将 Spring Statemachine 作为一个轻量级工作流引擎来使用?
java
兆子龙15 小时前
ahooks useRequest 深度解析:一个 Hook 搞定所有请求
java·javascript
兆子龙15 小时前
React Suspense 从入门到实战:让异步加载更优雅
java·javascript
咕白m62518 小时前
Java 实现 Excel 转 HTML:完整示例
java
RealPluto18 小时前
Spring AOP 失效排查
java·spring
码路飞19 小时前
热榜全是 OpenClaw,但我用 50 行 Python 就造了个桌面 AI Agent 🤖
java·javascript
Nyarlathotep011319 小时前
LinkedList源码分析
java·后端
用户83071968408219 小时前
Java 告别繁琐数据统计代码!MySQL 8 窗口函数真香
java·sql·mysql
带刺的坐椅19 小时前
SolonCode v0.0.20 发布 - 编程智能体(新增子代理和浏览器能力)
java·ai·agent·solon·solon-ai·claude-code·openclaw