2.3.4 并行度控制
一般情况下,并行循环的迭代操作在内核上的具体分配是由系统自行管理的。但在某些特殊的时候,我们也需要取得更多的控制权。
在并行循环模式中,我们经常会在各种情况下用到这些模式变体。例如,为了模拟一些性能较差的硬件,我们需要通过降低程序的并行度来执行一些性能测试;而如果循环中各次迭代都要花费大量时间来等待I/O输入,就适于提高程序的并行度来提高执行线程的数量,使之大于内核数。
你可以控制一个并行循环中并发的活动线量的最大数量。
所谓并行度,实质上是指我们在迭代时占用的内核数量。一般来说,并行度都是交由系统的底层组件自行管理的,例如parallel_for和parallel_for_each的函数实现、并发运行时的任务调度,以及操作系统中的线程调度等。这些组件都为各种条件下优化系统的吞吐量做出了一定的贡献。因此,尽管无法直接控制并行度,但我们可以通过控制执行一个并行循环的线程数量来对其施加影响。而这需要我们去设置一下SchedulerPolicy类中MinConcurrency和MaxConcurrency策略。关于设置这些策略(policies)的更多信息,读者可以参考附录A中的相关内容。