用 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

这两个动作都将在后台运行,第二个动作几乎可以保证在最后一个之前完成!