【问题标题】:Is Concurrent Haskell still restricted to a single OS thread?并发 Haskell 是否仍仅限于单个操作系统线程?
【发布时间】:2023-03-25 13:53:02
【问题描述】:

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

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

这种情况是否发生了变化,或者并发 Haskell 仍仅限于单个操作系统线程?

【问题讨论】:

标签: multithreading haskell concurrency multicore


【解决方案1】:

[编辑:这个问题只提到了 Concurrent Haskell,但我相信所引用的论文是“Composable Memory Transactions”,这是首次描述 Haskell STM 的论文。如果我在这里错了,请纠正我。]

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 那个链接在STM的问题上有点不清楚。您是否有任何迹象表明 Concurrent Haskell 的 STM 功能与其多核支持兼容?
    • 我不认为有任何东西会使它不兼容。我当然在多核上使用过 STM。
    • STM的原实现不兼容多核。但是,自从您发表评论后,我在其他地方读到它已更改为使用可行的评论。
    【解决方案3】:

    GHC Haskell 在多核上运行良好

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 2021-10-24
      • 2023-04-07
      • 2011-05-24
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多