miércoles, 5 de mayo de 2021

Erlang: BEAM

En post pasados ya hemos hablado sobre Erlang, pero en esta ocasión trataremos de la máquina virtual de Erlang.

BEAM es la máquina virtual en el núcleo de Erlang Open Telecom Platform (OTP). BEAM es parte del Erlang Run-Time System (ERTS), que compila el código fuente de Erlang y Elixir en código de bytes, que luego se ejecuta en el BEAM. Los archivos de código de bytes BEAM tienen la extensión de archivo .beam. Para los programadores Java, es el equivalente de la JVM.

En Stackoverflow hay una respuesta que nos puede servir para entender qué es BEAM:

La máquina virtual Erlang se ejecuta como un proceso de sistema operativo. De forma predeterminada, ejecuta un subproceso del sistema operativo por núcleo para lograr la máxima utilización de la máquina. La cantidad de subprocesos y en qué núcleos se ejecutan se puede establecer cuando se inicia la máquina virtual. Los procesos de Erlang son implementados en su totalidad por Erlang VM y no tienen conexión ni con los procesos ni con los subprocesos del sistema operativo. Entonces, incluso si está ejecutando un sistema Erlang de más de un millón de procesos, todavía es solo un proceso de SO y un hilo por núcleo. Entonces, en este sentido, Erlang VM es una "máquina virtual de proceso", mientras que el propio sistema Erlang se comporta como un SO y los procesos Erlang tienen propiedades muy similares a los procesos del SO, por ejemplo, el aislamiento. En realidad, hay una máquina virtual Erlang, basada en BEAM, que se ejecuta en bare metal y, de hecho, es un sistema operativo por derecho propio, consulte Erlang en Xen. Por cierto, es perfectamente posible tener sistemas que ejecuten millones de procesos Erlang y de hecho se hace en algunos productos, por ejemplo WhatsApp. Definitivamente estábamos pensando mucho en los sistemas operativos cuando diseñamos el entorno básico de Erlang.


El concepto de Máquina Virtual nos puede aclarar más las cosas:

...una máquina virtual es un software que simula un sistema de computación y puede ejecutar programas como si fuese una computadora real. Este software en un principio fue definido como "un duplicado eficiente y aislado de una máquina física". La acepción del término actualmente incluye a máquinas virtuales que no tienen ninguna equivalencia directa con ningún hardware real. Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados por los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse de esta "computadora virtual".

En próximos posts hablaremos más de esto.


Enlaces:
https://blog.erlang.org/a-brief-BEAM-primer/
https://stackoverflow.com/questions/16779162/what-kind-of-virtual-machine-is-beam-the-erlang-vm
https://github.com/AlexanderKaraberov/Erlang-BEAM-Links


No hay comentarios:

Publicar un comentario