parBufferdocumentaion

parBuffer :: Int -> Strategy a -> Strategy [a] 与evalBuffer相似,但在将列表元素推入缓冲区时会并行评估列表元素。”

evalBuffer :: Int -> Strategy a -> Strategy [a] evalBuffer是(惰性)列表的滚动缓冲策略组合器。
evalBuffer不像类型建议的那样组成。实际上,它忽略策略自变量r0至少将列表元素评估为弱头范式。”

我的问题的第一部分是,这是否意味着parBuffer也无视其策略论点?同样,为什么即使它不理会它甚至还会提供一个策略论点呢?

我的问题的第二部分是如何确定parBuffer使用哪种缓冲区大小?如果parBuffer始终保持n的缓冲区大小,除了必须在内存中保留更多火花之外,n=1n=10之间的区别是什么?我当时想选择n=<number of threads>"可能是明智的选择,但我不知道这会带来什么改善,因为无论何时使用parBuffern=1,只要消耗了火花,n=4仍会产生火花。

最佳答案

第一个答案:parBuffer使用Strategy评估列表中的一个元素,然后返回Strategy评估整个列表。是的,它并行评估列表。但是它仍然需要知道如何评估每个项目。 (您想要普通形式还是弱头普通形式还是...?)因此,它不会忽略第一个参数。

第二...基准吗?我怀疑答案取决于每个火花的工作量,您具有的数据依存性等等。

10-06 02:43