Почему Shake рекомендует отключать сборку мусора на холостом ходу?

В документации Shake рекомендуется выполнить компиляцию с использованием флага -with-rtsopts=-I0, чтобы отключить сборку мусора в режиме ожидания. Почему Shake рекомендует это?

Ответы

Ответ 1

По умолчанию (без флага) GHC выполняет сборку мусора (GC), если все потоки Haskell простаивают в течение 0,3 секунды. Поскольку система сборки регулярно работает с внешними процессами, довольно часто для всех потоков Haskell нет простоя для > 0,3 с, что вызывает много ненужных сборок мусора. Так как машина, вероятно, будет полностью загружена из процессов, в которых выполняется Shake, GC займет время, которое в противном случае могло бы принести полезную работу. Проблема усугубляется, если GC работает многопоточно.