Anatomía de la concurrencia en Elixir
(underjord.io)- El artículo analiza la experiencia del autor con el lenguaje de programación Elixir, con énfasis en sus capacidades de concurrencia y paralelismo.
- El autor ha usado Elixir como su lenguaje de programación principal durante los últimos 5-6 años, reconociendo su rendimiento y sus mínimas desventajas.
- El autor compara el modelo de concurrencia de Elixir con PHP y Python, y sostiene que el modelo de concurrencia de PHP depende del servidor web, mientras que Python tiene dificultades con la concurrencia debido al Global Interpreter Lock (GIL).
- Elixir está construido sobre Erlang y la máquina virtual de Erlang (BEAM), diseñada para ejecutar una gran cantidad de procesos ligeros, lo que proporciona la base para la concurrencia y el paralelismo.
- BEAM crea hilos para los schedulers al iniciar, y por defecto maneja la planificación de procesos con uno por cada núcleo de CPU disponible.
- El autor explica que las características de programación funcional inmutable de Elixir y Erlang fueron una elección práctica para lograr altos niveles de concurrencia y paralelismo.
- Los procesos en Elixir no comparten estado y solo pueden comunicarse de forma asíncrona mediante paso de mensajes, lo que garantiza una ejecución concurrente y paralela segura.
- El autor señala que al escribir código en Elixir, no suele ser necesario preocuparse demasiado por estos principios fundamentales, ya que la mayoría de las solicitudes web ocurren dentro de un solo proceso.
- Elixir ofrece un mecanismo de
async/awaitpara tareas concurrentes, implementado en el móduloTask, e incluye la funciónTask.async_streampara ejecutar unaTaskpor cada elemento enumerable. - El autor concluye que las excelentes opciones de concurrencia y paralelismo de Elixir y Erlang no fueron una idea agregada después, sino que están construidas en los fundamentos del runtime, por lo que la concurrencia en BEAM no es peligrosa ni difícil.
Aún no hay comentarios.