gpt4 book ai didi

haskell - Haskell 中的无锁编程

转载 作者:行者123 更新时间:2023-12-02 12:07:00 25 4
gpt4 key购买 nike

有谁知道是否可以在 Haskell 中进行无锁编程?我对以下问题感兴趣:是否有适当的低级原语可用,以及(如果有的话)有关使用这些原语在纯功能环境中构建工作的大型系统的任何信息。 (我以前从未在纯函数上下文中进行过无锁编程。)例如,据我了解,Control.Concurrent.Chan channel 是构建在 MVar 之上的,它(据我了解)使用锁 - - 原则上可以构建内部无锁的 Chan 原语版本吗?人们希望获得多少性能提升?

我还应该说我熟悉 TVar 的存在,但了解它们的内部实现——我被告知它们大多是无锁的,但我不确定它们是否完全无锁。因此,任何有关 TVar 内部实现的信息也会很有帮助!

( This thread 提供了一些讨论,但我想知道是否有任何更新/更全面的内容。)

最佳答案

MVar 不仅使用锁,它还是一个锁抽象。而且,我记得,各个 STM 原语都是乐观的,但在 STM 实现的各个地方都使用了锁。只要记住这句方便的押韵:“如果它可以阻塞,那么要小心锁”。

对于真正的无锁编程,您需要直接使用 IORef 以及 atomicModifyIORef

编辑:关于黑洞,我记得该实现是无锁的,但我不能保证细节。该机制在“多核 Haskell 的运行时支持”中描述:http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/multicore-ghc.pdf

但我认为,该实现经历了一些调整,如 Simon Marlow 的 2010 年 Haskell Implementors Workshop 演讲“调度多核延迟评估”中所述:http://haskell.org/haskellwiki/HaskellImplementorsWorkshop/2010 。不幸的是,幻灯片已离线,但视频应该仍然可以播放。

关于haskell - Haskell 中的无锁编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com