Concurrent Haskell仍然局限于单个OS线程吗?

时间:2010-08-11 06:30:43

标签: multithreading haskell concurrency multicore

在2005年的一篇研究论文中,它说

  

Concurrent Haskell目前仅针对单处理器实现。运行时在单个操作系统线程中调度轻量级Haskell线程。 Haskell线程只停留在定义良好的“安全点”;他们不能在任意时刻抢先一步。

这是否已更改,或者Concurrent Haskell仍限于单个OS线程?

3 个答案:

答案 0 :(得分:18)

[编辑:这个问题只提到了Concurrent Haskell,但我认为引用的论文是“可组合内存事务”,这是Haskell STM首次被描述的论文。如果我在这里错了,请纠正我。]

现在,STM在多核上运行良好。并行实现首先在GHC 6.6中发布,并采用细粒度的两阶段锁定策略;也就是说,为了提交事务,实现首先尝试锁定事务中涉及的每个变量,然后提交更改,最后解锁所有变量。获取锁定不会阻止:如果锁定已被保留,则事务中止并重试(这可以避免在锁定获取阻塞时应用的常见锁定顺序反转死锁)。

这个STM实现肯定不是最快的 - 文献描述了许多可以带来更好性能的替代技术,但是GHC的实现相对简单并且不涉及任何全局锁(在不同的变量集上运行的事务可以继续平行无干扰)。

答案 1 :(得分:6)

GHC can use multi-cores for Concurrent and Parallel Haskell since 2004。并发,并行,嵌套数据并行Haskell都使用相同的多线程运行时。

答案 2 :(得分:5)

GHC Haskell在多核上运行良好

自2004年以来,GHC Haskell程序在多个OS线程上运行多个Haskell线程,这些线程分布在多个内核上。

此外,您可以从此SO问题中获取latest status of multicore Haskell