并行和并发
并发和并行是两个不同的概念,它们的作用也不一样。并发是两个任务共享时间段,并行则是两个任务在同一时间发生,比如运行在多核 CPU 上。如果一个程序要运行两个任务,并且只有一个 CPU 给它们分配了不同的时间片,那么这就是并发,而不是并行。两者之间的区别如图:
本文主要讨论数据并行化。数据并行化是指将数据分成块,并为每块数据分配单独的处理单元。
先来看一个例子,计算一组字符串的总长度
//串行化计算
int sum = Stream.of("a", "abc", "ar", "abb")
.mapToInt(str -> str.length())
.sum();
System.out.println(sum);
//并行化计算
int sum1 = Stream.of("a", "abc", "ar", "abb")
.parallel()//加入这个方法即能并行化处理
.mapToInt(str -> str.length())
.sum();
System.out.println(sum1);
9
9
并行化与串行化运行速度,取决与其运行的环境及数据特征