Modelo Actor Concurrencia en Elixir – 1ra Parte

Una de las características más importantes de Erlang, y por lo consiguiente de Elixir, es cuando trabajamos con concurrencia. Gracias a la beam, es muy fácil trabajar con procesos concurrentes y sacar el mayor provecho de los procesadores de varios núcleos.

Elixir usa lo que se conoce como modelo de Actor concurrencia, lo cual significa lo siguiente:

  • Cada actor es un proceso
  • Cada proceso hace una tarea específica
  • Para decirle algo a un proceso, necesitas mandarle un mensaje. El proceso solo puede responder con otro mensaje.
  • El tipo de mensajes que el proceso puede responder, corresponde al proceso en sí.
  • Los procesos son por pattern matching.
  • Los procesos no intercambian ninguna memoria o información con otros procesos.

A lo mejor esto pueda parecer un poco complicado al principio, pero con unos ejercicios vamos a ir aprendiendo un poco más sobre los procesos en Elixir

Contruyendo una aplicación del clima

Para explicar un poco más los procesos, vamos a contruir una pequeña aplicación que nos diga la temperatura de una ciudad, usando http://openweathermap.org/. Así que para usar la API es necesario que crees una cuenta y obtengas tu API Key para usarlo.

Vamos a crear un nuevo proyecto

Ahora en nuestro proyecto abrimos el archivo mix.exs  para ingresar algunas bibliotecas que vamos a utilizar.

En la versión de Elixir 1.4 en adelante, no es necesario que pongamos esas bibliotecas en la parte de application  ya que elixir toma por default que lo quieres agregar, si tu versión de Elixir es menor, entonces tendrás que agregarlo a tus aplicaciones.

Ahora es tiempo de obtener las dependencias

Creando el worker

Crearemos una primera versión de nuestra aplicación en donde pediremos la temperatura de una ciudad, esta primera versión no es concurrente pero nos sirve para conocer nuestro código y nos da una base para ir contruyendo lo demás.

Crea un archivo lib/worker.ex

La parte más importante está comentada. En general, lo que hace el código es llamar a la API y obtenemos una respuesta de esa API, que gracias a HTTPoison podemos parsear a algo que podemos manejar dentro de Elixir. De ese JSON sacamos la información que necesitamos.

Vamos a probar este programa.

Y ahora a meter algunas ciudades

Y si creamos una lista de ciudades

Funciona muy bien, pero hay un problema, el programa no es concurrente, para obtener la temperatura de una ciudad espera a que termine la otra ciudad para continuar, y no estamos sacando provecho de Elixir.

En la segunda parte vamos a empezar a ver los procesos de Elixir y ver cómo nos puede ayudar a tener un programa concurrente.

A %d blogueros les gusta esto: