用 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

這兩個動作都將在後臺執行,第二個動作幾乎可以保證在最後一個之前完成!