16
Shakeのドキュメントでは、アイドルガベージコレクションを無効にするフラグ-with-rtsopts=-I0
を使用してコンパイルすることを推奨しています。なぜShakeはそれをお勧めしますか?なぜShakeはアイドルガベージコレクションを無効にすることをお勧めしますか?
Shakeのドキュメントでは、アイドルガベージコレクションを無効にするフラグ-with-rtsopts=-I0
を使用してコンパイルすることを推奨しています。なぜShakeはそれをお勧めしますか?なぜShakeはアイドルガベージコレクションを無効にすることをお勧めしますか?
デフォルトでは(フラグなし)、GHCはすべてのHaskellスレッドが0.3秒間アイドル状態になっていればガベージコレクション(GC)を実行します。ビルドシステムは外部プロセスを定期的に実行しているので、すべてのHaskellスレッドが0.3秒以上アイドル状態になるのはよくあることであり、不要なガベージコレクションが多く発生します。マシンはShakeが動作しているプロセスから完全にロードされる可能性があるので、GCは時間がかかり、そうしなければ有用な作業を行うことができます。 GCがマルチスレッドで動作する場合、問題は悪化します。
もっと一般的には、アイドルガベージコレクションは、主に*インタラクティブ*アプリケーション用であり、問題のアプリケーションがメジャーコレクション内の他の多くのスレッドを遅延させる可能性が高い同時発生状況のためです。 – dfeuer