如何在parList和parBuffer之间进行选择?

时间:2011-03-18 13:31:54

标签: haskell parallel-processing

我从haskell并行性开始,我已经成功学会了如何使用一些策略:r0, rseq, rdeepseq, parList, parMap。现在我正在寻求更高的效率。以下是我的问题:parListparBuffer之间有什么区别?在哪些情况下,每个战略都有效?

1 个答案:

答案 0 :(得分:7)

该论文提到了这两个组合器(link here)。

parList并行评估所有项目,立即将它们全部设置。我建议当你想要一次使用整个列表时这很有用,例如在map-fold问题中。如果你想评估一堆数字然后求它们,用parList进行评估,然后执行求和。

parBuffer评估前n个元素,当你消耗超过它时,它会引发下一个n,依此类推。所以parBuffer有意义,当你打算从块开始使用列表时,从头开始 - 或者当列表非常大(或无限)时,你将不会对它进行全面评估。例如,如果要从某些昂贵的计算项列表中查找前10个答案,可以使用take 10 . filter fparBuffer并行计算列表中的连续块,直到您完成找到了你要找的前十个项目。

相关问题