Ли BEAM (Erlang VM) делает сборку мусора параллельно?

Я изучаю Elixir и хочу быть уверенным, что я понимаю, как сбор мусора работает в VM Erlang.

Мое понимание таково:

  • Каждый процесс VM-уровня имеет свою собственную кучу
  • Если эта куча не заполняется до ее окончания, она отбрасывается процессом и GC не требуется
  • Кучи, которые заполняются, представляют собой мусор, собранный индивидуально, параллельно, поэтому GC не "останавливает мир", а только один процесс

Правильно ли это?

1 ответ

Возьмите сборку мусора. Когда пришло время собирать мусор в другой языков, вся система должна остановиться, пока сборщик мусора пробеги. Этот подход отлично подходит, если ваша компьютерная программа предполагается запустить один раз, написать какой-то вывод, а затем выйти. Но в долгосрочные приложения, такие как настольные, мобильные или серверные программ, эта стратегия приводит к тому, что иногда замороженные пользовательские интерфейсы и медленные время отклика. С другой стороны, программы Erlang могут иметь тысячи самостоятельных куч, которые собираются отдельно от мусора; в этом Таким образом, исполнение штрафа за сбор мусора распространяется времени, и поэтому долгосрочное приложение не будет таинственным образом остановить время от времени реагируя на сборщик мусора.

Эван Миллер, создатель популярной системы Chicago Boss.

Итак, я считаю, что сборщик erlang собирает одновременно, то есть различные кучи - это мусор, собранный независимо друг от друга. Независимо от того, существует ли какая-либо распараллеливание, зависит ли ваш node работает на нескольких ядрах или нет, но если это так, сбор мусора выполняется параллельно, да.

licensed under cc by-sa 3.0 with attribution.