Nella documentazione Shake si consiglia di compilare utilizzando la flag -with-rtsopts=-I0
per disabilitare la garbage collection inattiva. Perché Shake lo consiglia?Perché Shake consiglia di disabilitare la garbage collection inattiva?
16
A
risposta
19
Per impostazione predefinita (senza il flag) GHC esegue una garbage collection (GC) se tutti i thread Haskell sono rimasti inattivi per 0,3 secondi. Poiché un sistema di build esegue regolarmente processi esterni, è abbastanza comune che tutti i thread Haskell siano inattivi per> 0,3 secondi, il che causa un sacco di inutili raccolte di dati inutili. Poiché è probabile che la macchina sia completamente caricata dai processi, Shake è in esecuzione, il GC impiegherà tempo che altrimenti potrebbe svolgere un lavoro utile. Il problema viene esacerbato se il GC esegue multi-thread.
Più in generale, la raccolta dati inutili è principalmente per le applicazioni * interattive * e anche per le situazioni concorrenti in cui è probabile che l'applicazione in questione ritardi molti altri thread in una raccolta principale. – dfeuer