6.1 并行和并发
并发是两个任务共享时间段。
并行则是两个任务同一时间发生,比如运行在多核CPU上。
如果一个程序有两个任务,并且只有一个CPU给它们分配了不同的时间片,那么这就是并发。
并行化是指为缩短任务执行时间,将一个任务分解为几个部分,然后再多核CPU上并行执行。这和顺序执行的任务量是一样的。
本章将讨论数据并行化,数据并行化是指将数据分成块,为每块数据分配单独的处理单元,然后对每块数据执行运算,最后将数据块上的结果汇总。
6.3 并行化流操作
并行化流操作只需要调用stream对象的parallel 方法就能让其拥有并行操作的能力,或者从一个集合对象调用parallelStream方法创建一个拥有并行能力的流。
//并行化计算专辑曲目长度
albums.parallelStream().flatMap(Album::getTracks).maToInt(Track::getLength).sum();
6.7 并行化数组操作
//使用数组下标初始化数组
public static double[] parallelInitialize(int size){
double[] values =new double[size];
Arrays.parallelSetAll(values,i->i);
return values;
}
parallelPrefix操作会更新一个数组,将每一个元素替换为当前元素和其先驱元素的和,这里的和是一个任意的BinaryOperator。
parallelSort 并行化对数组元素进行排序。