servicio - ¿Cuánto tiempo pueden ocurrir las pausas en un programa de Haskell debido a la recolección de basura?
servicio de recoleccion de basura pasa (1)
GHC está diseñado para el rendimiento computacional, no la latencia. Como resultado, GHC utiliza un recolector de basura multihilo generacional con montones de subprocesos locales . La recolección de basura de objetos de subproceso local no detiene otros subprocesos. El GC principal ocasional del montón global detendrá todos los subprocesos.
Por lo general, las pausas son en un pequeño número de milisegundos, sin embargo, no hay garantía de latencia.
Puede controlar la frecuencia de GC a través de varios indicadores de tiempo de ejecución (por ejemplo, el intervalo gc -I
).
¿En relación con mis otras preguntas, las colecciones de Haskell con límites garantizados en el peor de los casos para cada operación? Tengo curiosidad: ¿durante cuánto tiempo las pausas pueden ser causadas por la recolección de basura?
¿Haskell usa algún tipo de recolección de basura incremental para que un programa se detenga solo por periodos pequeños a la vez, o se puede detener por varios segundos en un caso extremo?
Encontré dos documentos de SPJ sobre el tema: https://research.microsoft.com/en-us/um/people/simonpj/papers/non-stop/index.htm . Pero no encontré una referencia si estas ideas fueron realmente adoptadas por GHC (u otras implementaciones de Haskell).