19

私の他の質問に関連して、すべての単一の操作に対して最悪の場合の境界が保証されているHaskellコレクション?、私は興味があります:ガベージコレクションによってどのくらいの休止が発生する可能性がありますか?

Haskellは、プログラムが一度に短時間だけ停止するように、ある種の増分ガベージコレクションを使用しますか、それとも極端な場合には数秒間停止できますか?

このテーマに関する2つのSPJの論文を見つけました: https ://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm 。しかし、これらのアイデアが実際にGHC(または他のHaskellの実装)によって採用された場合、私は参照を見つけられませんでした。

4

1 に答える 1

24

GHCは、レイテンシではなく、計算スループットのために設計されています。その結果、GHCは、スレッドローカルヒープを備えた世代別のマルチスレッドガベージコレクターを使用します。スレッドローカルオブジェクトのガベージコレクションは、他のスレッドを停止しません。グローバルヒープの時折のメジャーGCは、すべてのスレッドを一時停止します。

通常、一時停止は数ミリ秒単位ですが、遅延の保証はありません。

GCの頻度は、いくつかの実行時フラグ(gc-I間隔など)を介して制御できます。

于 2012-09-13T11:15:57.143 に答える