10.1 并行化标准库算法

C++17为标准库添加并行算法。都是对之前已存在的一些标准算法的重载,例如:std::findstd::transformstd::reduce。并行版本的签名除了和单线程版本的函数签名相同之外,在参数列表的中新添加了一个参数(第一个参数)——指定要使用的执行策略。例如:

std::vector<int> my_data;
std::sort(std::execution::par,my_data.begin(),my_data.end());

std::execution::par的执行策略,表示允许使用多个线程调用此并行算法。这是一种权限,而不是一个申请——如果需要,这个算法依旧可以以串行的方式运行。通过指定执行策略,算法的需求复杂性已经发生变化,并且要比串行版的算法要求要宽松。因为并行算法要利用系统的并行性,从而算法通常会做更多的工作——如果将任务划分在100个处理上进行,即便是总任务量是原先的的2倍,那仍旧能获得50倍的加速。

了解算法本身前,先来看一下执行策略。