Translate

domingo, 19 de enero de 2025

Diferencias entre Hilos y Procesos en Elixir


Elixir, gracias a la BEAM VM, utiliza procesos livianos que se diferencian fundamentalmente de los hilos tradicionales:  

1. Aislamiento Completo  

  • Los procesos en Elixir no comparten memoria. Esto evita condiciones de carrera, simplificando el manejo de la concurrencia.  
  • En contraste, los hilos suelen compartir memoria, requiriendo mecanismos como locks y semáforos para sincronización.  


2. Ligereza y Escalabilidad  

  • Cada proceso en Elixir consume muy pocos recursos, permitiendo que millones coexistan.  
  • Los hilos son más pesados y su número está limitado por el sistema operativo.  


3. Comunicación por Mensajes  

  • Los procesos en Elixir se comunican mediante mensajes asíncronos, usando send y receive.  
  • Los hilos comparten datos directamente, lo que puede complicar la concurrencia.  

4. Tolerancia a Fallos  

  • Elixir sigue la filosofía "Let it crash", donde los supervisores reinician procesos fallidos.  
  • Los hilos carecen de un sistema equivalente nativo de supervisión.  


Veamos un ejemplo rápido: 


spawn(fn -> receive do

  msg -> IO.puts("Mensaje recibido: #{msg}")

end end)

|> send("¡Hola, proceso!")


Elixir muestra cómo un enfoque basado en procesos simplifica y fortalece la concurrencia, ideal para sistemas distribuidos y resilientes.