在2005年的一篇研究论文中提到:
并发Haskell目前仅支持单处理器。运行时在单个操作系统线程内调度轻量级的Haskell线程。Haskell线程只在明确定义的“安全点”处被暂停;它们不能在任意时刻被抢占。
这种情况是否有所改变,或者并发Haskell仍然限制于单个操作系统线程?
在2005年的一篇研究论文中提到:
并发Haskell目前仅支持单处理器。运行时在单个操作系统线程内调度轻量级的Haskell线程。Haskell线程只在明确定义的“安全点”处被暂停;它们不能在任意时刻被抢占。
这种情况是否有所改变,或者并发Haskell仍然限制于单个操作系统线程?
现在STM在多核上运行良好。并行实现首次在GHC 6.6中发布,采用一种细粒度的两阶段锁定策略;也就是说,在提交事务之前,实现首先尝试锁定涉及到的每个变量,然后提交更改,并最终解锁所有的变量。获取锁不会阻塞:如果锁已经被持有,则事务会中止并重试(这避免了通常的锁顺序反转死锁,如果锁获取是阻塞的话,则会出现死锁)。
这种STM实现显然并不是最快的——文献描述了许多可替代技术,可以获得更好的性能,但GHC的实现相对简单,并且不涉及任何全局锁(在操作不同变量集的事务之间不会干扰的情况下可以并行进行)。
自2004年起,GHC可以在并发和并行Haskell中使用多核处理器。并发、并行、嵌套数据并行Haskell都使用相同的多线程运行时。
GHC Haskell 在多核上运行良好
自2004年以来,GHC Haskell程序可以在多个操作系统线程上运行多个Haskell线程,并分布在多个核心上。
此外,您可以从这个SO问题中获取多核Haskell的最新状态。