por Joe Armstrong, Robert Virding y Mike Williams • Primera versión, 1986 (Interprete de Prolog) • Segunda versión, 1988 (JAM) • Tercera versión, 1993 (BEAM) • Versión actual 18.0 3
Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang Proceso de Erlang
• La BEAM crea un Thread del SO por cada core en la máquina. • Un Scheduler utiliza un Thread del SO. • Cada Scheduler tiene colas de ejecución. • Cada scheduler maneja su propia memoria. 29
U A L S C H E D U L E R S C H E D U L E R S C H E D U L E R S C H E D U L E R C P U O S T H R E A D C P U O S T H R E A D C P U O S T H R E A D C P U O S T H R E A D Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso Proceso
• Hacen balanceo de carga. • Controlan la ejecución de los procesos • Cada proceso es re encolado para ejecución después de 2000 reducciones (Un proceso no puede apropiarse del procesador y bloquear otros procesos) 31
T R O D E L A B E A M • Heap del proceso • Tablas de ETS • Tablas de Atomos (tamaño fijo) • Espacio para Binarios Grandes (> 64 bytes, Conteo de referencias) • Código • … 35
C E S O • Permite recolectar cada proceso de forma independiente. • El Colector de basura es más eficiente. • El Colector de basura es más simple (No es necesario implementar un colector en tiempo real: Azul) • Disminuye la necesidad de sincronización entre threads (Esto es mejor entre mayor sea al número de procesadores) 36
B A S U R A • Copying Collector • Generacional • 2 espacios o zonas: nueva y vieja • Datos nuevos son mantenidos en el espacio nuevo por un número determinado de colecciones, antes de pasar a la zona vieja. 37