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 时间片轮转,并行依赖多核硬件
相关推荐
daidaidaiyu21 小时前
ThingsBoard 集群的核心逻辑源码分析
java
2601_9628857221 小时前
如何用 Python 自动识别股票的支撑位与压力位?
开发语言·python
爱吃奥利奥_wen1 天前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
我可能是个假开发1 天前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong1 天前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
WL学习笔记1 天前
日期类(C++)
开发语言·c++·日期类实现
【JAVA】玩家1 天前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog1 天前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
谢亮_vipxieliang1 天前
Go map与结构体的正确使用
开发语言·golang·哈希算法
H.莓飛1 天前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio