Сколько пауз может произойти в программе Haskell из-за сбора мусора?

Относительно моего другого вопроса Коллекции Haskell с гарантией наихудших оценок для каждой отдельной операции? Мне любопытно: Как долго могут быть вызваны паузы по сбору мусора?

Использует ли Haskell какую-то инкрементную сборку мусора, так что программа останавливается только в течение небольших периодов за раз или может остановиться в течение нескольких секунд в крайнем случае?

Я нашел две статьи SPJ по этому вопросу: https://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm. Но я не нашел ссылки, если бы эти идеи были фактически приняты GHC (или другими реализациями Haskell).

Ответ 1

GHC предназначен для вычислительной пропускной способности, а не для латентности. В результате GHC использует коллективный сборщик мусора с потоковыми локальными кучами. Сбор мусора из локальных объектов потока не останавливает другие потоки. Случайный основной GC глобальной кучи приостанавливает все потоки.

Обычно паузы находятся в небольшом количестве миллисекунд, хотя нет гарантии задержки.

Вы можете контролировать частоту GC через несколько флагов времени выполнения (например, gc -I).