parMap
这是对并行策略和(Control.Parallel.Strategies)的怀疑
这是关于parMap rseq
与 等价的parMap rpar
。
由于parMap
使用parList
它并行评估,因此使用rseq
或rpar
将与 WHNF 并行评估。不是吗?
更新:
自从
parMap strat f = (`using` parList strat) . map f
parList = parTraversable
parTraversable strat = evalTraversable (rpar `dot` strat)
evalTraversable = traverse
strat2 `dot` strat1 = strat2 . runEval . strat1
parMap rseq
使用策略
rpar `dot` rseq
这使:
rpar . runEval . rseq
这使:
(\x -> x `par` return x) . runEval . (\x -> x `pseq` return x)
很难去想结果。
更新:
我明白了,惰性求值首先采用组合的第一个函数,并且
(\x -> x `par` return x)
授予可遍历容器中的每个元素将在可能的情况下触发并行计算。
所以我们可以添加(rpar dot
rseq)等价于(rseq dot
rpar),不是吗?
这parMap rpar
是多余的,因为它为每个可遍历元素生成两个火花。!!