dev*_*223 6 parallel-processing haskell
该par功能如何运作?它的签名是:
par :: a -> b -> b.
Run Code Online (Sandbox Code Playgroud)
但这很奇怪.为什么不呢:
par :: (a -> b) -> a -> b
(获取函数,在新线程中执行它并返回结果)?
另一个问题,这是正常的haskell多线程吗?

Don*_*art 10
par 是投机性的并行性,依赖于懒惰.
您推测a在您忙于工作时应计算未评估的值b.
稍后在您的程序中,您可能会a再次参考,它将准备就绪.
这是一个例子.我们希望将3个数字加在一起.每个数字的计算成本都很高.我们可以并行计算它们,然后将它们加在一起:
main = a `par` b `par` c `pseq` print (a + b + c)
where
a = ack 3 10
b = fac 42
c = fib 34
fac 0 = 1
fac n = n * fac (n-1)
ack 0 n = n+1
ack m 0 = ack (m-1) 1
ack m n = ack (m-1) (ack m (n-1))
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |