Soh*_* Si 0 parallel-processing monads haskell
在Haskell中,如何print并行运行多个(monad?)函数(例如)并按照完成时间的顺序查看它们的输出?我想要三个进程,每个进程最终都在打印函数中.
import Control.Parallel
main = a `par` b `pseq` (a,b)
where
a = print("ack",ack 3 10)
b = print("fac",fac 42)
Run Code Online (Sandbox Code Playgroud)
如果我不使用pseq,它将显示par组合指定的最后一个.我想确保在程序结束之前完成所有进程.我试过这个,但它没有显示a,b的输出:
...
main = a `par` b `pseq` print("done.")
...
Run Code Online (Sandbox Code Playgroud)
注意:我的程序以以下行结束:
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))
Run Code Online (Sandbox Code Playgroud)
不要Control.Parallel用于同时运行IO操作.
Control.Concurrent.Async应该做你想做的事情 - Control.Parallel用于提示可以同时评估哪些纯操作,而不是同时运行多个动作(monadic或其他).