1、并发
-
定义:多个任务交替执行(看起来同时进行,实际可能是分时复用)。
-
核心思想:通过任务切换提高资源利用率,尤其在I/O等待时执行其他任务。
-
实现方式:协程、事件循环(如Node.js)、虚拟线程(JDK21)。
-
适用场景:I/O密集型任务(如Web服务器处理请求)。
-
示例:
-
单核CPU上运行多个程序(通过时间片轮转)。
-
一个人边吃饭边回消息(交替进行)。
-
高并发是一种状态,如果大量请求访问网关接口。这种情况会发生大量执行操作,如数据库操作、资源请求、硬件占用等。这就需要对接口进行优化,而多线程是处理高并发的一种手段。
2、并行
-
定义:多个任务真正同时执行,依赖多核/多机资源。
-
核心思想:通过物理资源扩展提升性能。
-
实现方式:多进程、多线程(绑定不同CPU核心)、GPU计算。
-
适用场景:CPU密集型任务(如矩阵计算、大数据处理)。
-
示例:
-
多核CPU同时执行多个线程。
-
多个人同时打扫不同房间。
-
3、多线程
-
定义:一种编程模型,通过创建多个线程实现并发或并行。
-
核心思想:利用线程轻量级特性(相比进程)提升效率。
-
实现方式:物理线程(如Java
Thread
类)、线程池。 -
注意:
-
多线程可实现并发(单核交替执行)或并行(多核同时执行)。
-
线程过多会导致调度开销,需平衡数量。
-
是一种异步处理的一种方式,在同一时刻最大限度的利用计算机资源。
4、类比说明
-
并发:一家咖啡店只有一个服务员,但能轮流处理多个顾客的点单(快速切换)。
-
并行:咖啡店有多个服务员,同时为不同顾客服务。
-
多线程:雇佣多个服务员(线程)的策略,可以是并发或并行。
5、三者的关系
维度 | 并发 | 并行 | 多线程 |
---|---|---|---|
目标 | 任务交替,提高利用率 | 真实同时,提升性能 | 实现并发/并行的工具 |
依赖硬件 | 不需要多核 | 需要多核/分布式 | 可单核或多核 |
典型场景 | Web服务器响应请求 | 科学计算 | 数据库连接池 |
6、总结
-
并发是逻辑上的"同时"(任务交替),并行是物理上的同时(多核执行)。
-
多线程是实现并发或并行的具体技术手段,需根据硬件和任务类型选择:
-
I/O密集型 → 并发(虚拟线程/协程)。
-
CPU密集型 → 并行(物理线程/多进程)。
-