因垃圾收集Haskell的程序多长时间的停顿,可能会发生?(How long pauses can

2019-07-31 13:37发布

关于我的其他问题哈斯克尔收藏有保证的最坏情况界限的每一个操作? 我很好奇: 如何长时间的停顿可以通过垃圾收集引起的?

哈斯克尔是否使用某种增量垃圾收集,这样一个程序停止仅在一小段时间,或者可以将其在极端情况下停止几秒钟?

我发现了两个SPJ关于这个问题的论文: https://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm 。 但我没有找到一个参考,如果这些理念是由GHC(或其他Haskell的实现)实际采用。

Answer 1:

GHC是专为计算吞吐量,而不是延迟。 其结果是,GHC使用代,多线程垃圾收集器与线程局部堆 。 本地线程对象的垃圾收集没有停止其他线程。 全局堆偶尔主要GC将暂停所有线程。

通常情况下,暂停在小的毫秒数,hwoever没有延迟的保证。

您可以通过控制GC的频率几个运行标志 (例如GC -I间隔)。



文章来源: How long pauses can occur in a Haskell program due to garbage collection?