Při programování aplikací pro dnešní vícejádrové a víceprocesorové systémy se souběžností a paralelismem vyplatí zabývat. Jednoduchými úpravami našich programů získáme nezanedbatelný nárůst výkonu.
Modul Control.Concurrent nám umožňuje pracovat s vlákny, která se dají vytvářet pomocí funkce forkIO
. Tato vlákna můžeme synchronizovat přes hodnoty MVar a zasíláním zpráv přes kanály Chan. Tyto mechanismy nám pomáhají vyvarovat se typickým problémům uváznutí a vyhladovění.
Různé paralelní strategie zavádí modul Control.Parallel.Strategies. Koncept vláken rozšiřuje tzv. Software Transactional Memory, která přidává atomicitu.
Více informací lze nalézt na Wikipedii, Wikibooks a ve dvacáté čtvrté a dvacáté osmé kapitole knihy Real World Haskell.
Při překladu programu je potřeba překladači GHC předat parametr -threaded
a při spuštění určit počet jader (v rámci nastavení +RTS
) parametrem -N
.