Haskell 中的并行与并发编程
1. 并行映射
在 Haskell 里, spawn
函数可用于并行执行计算,它会返回一个 IVar
类型的对象,此对象能用于等待计算结果。 spawn
函数位于 Control.Monad.Par
模块中。
并行映射(parallel map)是通过调用 spawn
函数对队列中的所有元素应用指定函数,接着等待所有结果响应来实现的。以下是 parMapM
函数的定义:
parMapM :: NFData object_B => (object_A -> Par object_B) -> [object_A] -> Par [object_B]
parMapM varF as = do
varIBS <- mapM (spawn.varF) as
mapM get varIBS
parMapM
也由 Control.Monad.Par
模块提供,这里展示的版本相对更通用。需要注意的是,函数 f
的结果会在 Par
单子中返回,这意味着 f
自身可借助 fork
和其他 Par
操作实现进一步的并行。当映射的函数参数是单子类型