关于我的另一个问题Haskell 集合可以保证每个操作的最坏情况范围? https://stackoverflow.com/q/12393104/1333025, 我很好奇:垃圾收集会导致多长时间的暂停?
Haskell 是否使用某种增量垃圾收集,以便程序一次仅停止一小段时间,或者在极端情况下可以停止几秒钟?
我找到了两篇 SPJ 关于这个主题的论文:https://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm https://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm。
但我没有找到这些想法是否被 GHC(或其他 Haskell 实现)实际采用的参考。
GHC 是为计算吞吐量而不是延迟而设计的。因此,GHC 使用分代、多线程 http://community.haskell.org/%7Esimonmar/papers/parallel-gc.pdf垃圾收集器具有线程本地堆 http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/local-gc.pdf。
线程本地对象的垃圾收集不会停止其他线程。全局堆偶尔的Major GC会暂停所有线程。
通常,暂停时间只有几毫秒,但不能保证延迟。
您可以通过以下方式控制 GC 的频率几个运行时标志 http://www.haskell.org/ghc/docs/7.0.1/html/users_guide/runtime-control.html(例如GC-I
间隔)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)