/ / BEAM (il VM Erlang) esegue la garbage collection in parallelo? - raccolta dei rifiuti, erlang, elisir

BEAM (Erlang VM) esegue la garbage collection in parallelo? - raccolta dei rifiuti, erlang, elisir

Sto imparando l'elisir e voglio essere sicuro di capire come funziona la garbage collection nella macchina virtuale di Erlang.

La mia comprensione è questa:

  • Ogni processo a livello di VM ha il proprio heap
  • Se quell'heap non si riempie prima che termini, viene scartato con il processo e non è necessario alcun GC
  • Gli heap che si riempiono sono quelli raccolti individualmente, in parallelo, quindi GC non "ferma" il mondo ", solo quel processo

È corretto?

risposte:

11 per risposta № 1

Prendere la raccolta dei rifiuti. Quando è il momento di raccogliere rifiuti in altri lingue, l'intero sistema deve fermarsi mentre il garbage collector piste. Questo approccio è perfetto se il tuo programma è dovrebbe funzionare una volta, scrivere un po 'di output e quindi uscire. Ma in applicazioni di lunga durata, come desktop, mobile o server programmi, questa strategia si traduce in interfacce utente a volte bloccate e lente tempi di risposta. I programmi di Erlang, d'altra parte, possono avere migliaia di heap indipendenti che vengono raccolti separatamente dai rifiuti; in questo modo, la penalità delle prestazioni della raccolta dei rifiuti è ripartita tempo, quindi un'applicazione a lunga esecuzione non si fermerà misteriosamente rispondendo di volta in volta mentre gira i raccoglitori.

Evan Miller, creatore del famoso framework Chicago Boss.

Quindi credo che i raccoglitori di rifiuti di erlangcontemporaneamente, cioè, i vari heap sono garbage collection indipendentemente l'uno dall'altro. Se esiste una parallelizzazione dipende dal fatto che il tuo nodo sia eseguito su più core o meno, ma in tal caso la raccolta dei dati inutili viene eseguita in parallelo, sì.