Jon*_*len 6 concurrency multithreading haskell multicore
它在2005年的一篇研究论文中说
并发Haskell目前仅针对单处理器实现.运行时在单个操作系统线程中调度轻量级Haskell线程.Haskell线程只停留在定义良好的"安全点"; 他们不能在任意时刻抢先一步.
这是否已更改或者Concurrent Haskell仍限于单个OS线程?
Sim*_*low 18
[编辑:这个问题只提到了Concurrent Haskell,但我认为引用的论文是"可组合内存事务",这是Haskell STM首次被描述的论文.如果我错了,请纠正我.]
STM现在在多核上运行良好.并行实现首先在GHC 6.6中发布,并采用细粒度的两阶段锁定策略; 也就是说,为了提交事务,实现首先尝试锁定事务中涉及的每个变量,然后提交更改,最后解锁所有变量.获取锁定不会阻止:如果锁定已被保留,则事务中止并重试(这可以避免在锁定获取阻塞时应用的常见锁定顺序反转死锁).
这个STM实现肯定不是最快的 - 文献描述了许多可以带来更好性能的替代技术,但GHC的实现相对简单并且不涉及任何全局锁定(在不同变量集上运行的事务可以并行进行而不会产生干扰).