作者
future
这里:这是因为有一个针对嵌套并行性的内置保护。如果没有它,你会用太多的并行进程使你的计算机超载,这不仅会使它过热,还会降低整体性能。
我已经为下一个版本更新了“未来拓扑”小插曲,内容如下:
内置的递归并行保护
上面我们已经平行地处理了未来的外部或内部集合。如果我们想同时处理这两层呢?很容易使用:
plan(list(multiprocess, multiprocess))
虽然这并没有给出错误,但是我们会发现,期货的内层将按顺序处理,就像我们使用
plan(list(multiprocess, sequential))
. 此行为是由于内置的对嵌套并行性的保护。如果两个层都并行运行,每个层都使用机器上可用的8个内核,那么我们将运行8*8=64个并行进程——这肯定会使我们的计算机过载。内部发生的是外层,
availableCores()
等于八(8),而内层等于一(1)。
现在,我们可以想象,我们处理外层的两个平行期货,然后处理内层的四个平行期货。在这种情况下,我们最多只能运行8个内核(=2*4)。这可以通过强迫每个层的固定数量的工人来实现(不推荐):
plan(list(tweak(multiprocess, workers = 2), tweak(multiprocess, workers = 4)))