目录
什么是并发(Concurrency)?
1.1 并发的定义
并发指的是多个任务交替执行,看起来像是同时进行,但实际上是通过快速切换任务来实现的。就像你一边吃饭一边看电视,虽然你不可能同时做两件事,但你可以快速切换注意力。
在程序中,并发通常用于提高资源利用率,让多个任务共享CPU时间片。
1.2 并发的特点
-
任务交替执行:多个任务轮流使用CPU。
-
单核或多核:并发可以在单核CPU上实现。
-
提高响应性:让程序看起来像是同时处理多个任务。
1.3 并发的代码示例
/**
* 作者:十五001
*
*/
public class ConcurrencyExample {
public static void main(String[] args) {
Runnable task1 = () -> {
for (int i = 0; i < 5; i++) {
System.out.println("任务1: " + i);
try {
Thread.sleep(100); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Runnable task2 = () -> {
for (int i = 0; i < 5; i++) {
System.out.println("任务2: " + i);
try {
Thread.sleep(100); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread thread1 = new Thread(task1);
Thread thread2 = new Thread(task2);
thread1.start();
thread2.start();
}
}
输出结果:
任务1: 0
任务2: 0
任务1: 1
任务2: 1
任务1: 2
任务2: 2
...
解释:
任务1和任务2交替执行。
虽然只有一个CPU核心,但通过快速切换任务,看起来像是同时运行。
什么是并行(Parallelism)?
2.1 并行的定义
并行指的是多个任务真正同时执行,通常需要多核CPU的支持。就像你和朋友一起打扫房间,你擦桌子,他拖地,两个人同时工作。
在程序中,并行用于提高计算性能,充分利用多核CPU的能力。
2.2 并行的特点
-
任务同时执行:多个任务真正同时运行。
-
多核CPU:并行需要多核CPU的支持。
-
提高性能:通过同时执行多个任务来加快处理速度。
2.3 并行的代码示例
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;
/**
* 作者:十五001
*
*/
public class ParallelismExample {
public static void main(String[] args) {
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new RecursiveAction() {
@Override
protected void compute() {
Runnable task1 = () -> {
for (int i = 0; i < 5; i++) {
System.out.println("任务1: " + i);
try {
Thread.sleep(100); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Runnable task2 = () -> {
for (int i = 0; i < 5; i++) {
System.out.println("任务2: " + i);
try {
Thread.sleep(100); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
invokeAll(new RecursiveAction() {
@Override
protected void compute() {
task1.run();
}
}, new RecursiveAction() {
@Override
protected void compute() {
task2.run();
}
});
}
});
}
}
输出结果:
任务1: 0
任务2: 0
任务1: 1
任务2: 1
任务1: 2
任务2: 2
...
解释:
任务1和任务2同时执行。
需要多核CPU的支持,才能真正实现并行。
并发 vs 并行
特性 | 并发(Concurrency) | 并行(Parallelism) |
---|---|---|
执行方式 | 任务交替执行 | 任务同时执行 |
CPU核心 | 单核或多核 | 多核 |
目标 | 提高资源利用率,增强响应性 | 提高计算性能 |
适用场景 | I/O密集型任务(如网络请求、文件读写) | 计算密集型任务(如数据分析、图像处理) |
总结
-
并发:就像一个人快速切换任务,适合提高响应性和资源利用率。并发非常适合处理I/O密集型任务,比如网络请求、文件读写等。这些任务大部分时间都在等待外部设备的响应,所以通过并发可以让CPU在等待期间切换到其他任务,提高效率。
-
并行:就像多个人同时工作,适合提高计算性能。并行非常适合处理计算密集型任务,比如矩阵运算、数据分析等。这些任务需要大量的计算资源,通过并行可以将任务分解到多个核心上,加速计算过程。
-
想象一下你在看电影。并发就像是你在看电影的同时,不停地切换频道,虽然看起来像是同时在看多个频道,但实际上你只是在快速切换。而并行就像是你和朋友一起看不同的电影,你们真正地同时在看不同的内容。虽然并发和并行是不同的概念,但它们并不是完全独立的。实际上,它们可以结合在一起使用。比如,你可以通过并发来管理多个任务,然后在并行的环境下让这些任务真正地同时运行。