用 forkIO 产生线程
Haskell 支持许多形式的并发,最明显的是使用 forkIO
分叉线程。
函数 forkIO::IO () -> IO ThreadId
采取 IO
动作并返回其 ThreadId
,同时动作将在后台运行。
我们可以使用 ghci
非常简洁地证明这一点:
Prelude Control.Concurrent> forkIO $ (print . sum) [1..100000000]
ThreadId 290
Prelude Control.Concurrent> forkIO $ print "hi!"
"hi!"
-- some time later....
Prelude Control.Concurrent> 50000005000000
这两个动作都将在后台运行,第二个动作几乎可以保证在最后一个之前完成!