在2005年的一篇研究论文中,它说
Concurrent Haskell目前仅针对单处理器实现。运行时在单个操作系统线程中调度轻量级Haskell线程。 Haskell线程只停留在定义良好的“安全点”;他们不能在任意时刻抢先一步。
这是否已更改,或者Concurrent Haskell仍限于单个OS线程?
答案 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。