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 时间片轮转,并行依赖多核硬件
相关推荐
SmallBambooCode16 小时前
【人工智能】【Python】离线环境下huggingface预训练权重导入流程
开发语言·人工智能·python
Yeh20205817 小时前
Mybatis笔记一
java·笔记·mybatis
likerhood17 小时前
Java 动态代理深度解析:从“为什么“到“底层原理“
java
_阿伟_17 小时前
信息检索简单介绍
java
下次再写17 小时前
深入浅出微服务架构:从理论到Spring Boot实战
java·微服务·springboot·springcloud·架构设计·后端开发·分布式系统
夕除17 小时前
spring boot--08
开发语言·windows·python
进阶的猿猴17 小时前
Rsa简单实现接口到期限制(springBoot)
java·spring boot·后端
狐狐生风17 小时前
Python UV 完整安装教程
开发语言·python·uv
Kiyra17 小时前
限流不是加个计数器就行:用 Lua 脚本实现多维度原子限流
开发语言·人工智能·网络协议·职场和发展·架构·lua·ai-native