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.