haskell – 使用monad的并行策略

前端之家收集整理的这篇文章主要介绍了haskell – 使用monad的并行策略前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我经常看到 Haskell的并行策略的使用和解释与纯计算相关(例如fib).但是,我并不经常看到它与monadic结构一起使用:当应用于ST或IO时,是否对par和相关函数效果有合理的解释?这样的使用会增加任何加速吗?

解决方法

IO monad中的并行性更准确地称为“并发”,并且由Control.Concurrent模块中的forkIO和朋友支持.

并行化ST monad的困难在于ST必然是单线程的 – 这就是它的目的. ST Monad有一个懒惰的变种,Control.Monad.ST.Lazy,它原则上可以支持并行评估,但我不知道有人试图这样做.

有一个新的monad用于并行评估,名为Eval,可以在parallel package的最新版本中找到.我建议使用带有rpar和rseq的Eval monad,而不是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)

猜你在找的Java相关文章