Sco*_*est 6 parallel-processing monads concurrency haskell
我经常看到Haskell的并行策略的使用和解释与纯计算有关(例如fib
).但是,我并不经常看到它与monadic结构一起使用:par
当应用于ST s
或者IO
?时,是否有合理的解释效果和相关函数?这样的使用会增加任何加速吗?
Sim*_*low 12
IO monad中的并行性更准确地称为"并发",并且由模块中的forkIO
朋友支持Control.Concurrent
.
并行化ST monad的困难在于ST必然是单线程的 - 这就是它的目的.ST monad有一个懒惰的变体Control.Monad.ST.Lazy
,它原则上可以支持并行评估,但我不知道有人试图这样做.
有一个名为Eval的并行评估新monad ,它可以在并行软件包的最新版本中找到.我建议使用Eval
单子与rpar
和rseq
而不是par
和pseq
这些天,因为它会导致更强大和可读的代码.例如,fib
可以编写通常的示例
fib n = if n < 2 then 1 else
runEval $ do
x <- rpar (fib (n-1))
y <- rseq (fib (n-2))
return (x+y)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1403 次 |
最近记录: |