Сколько пауз может произойти в программе 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
).