Ag

Agent en Elixir

3 ejercicios

Acerca de Agent

Aunque lanzar un proceso es fácil, gestionar su estado y su comportamiento puede volverse muy complicado. El módulo Agent es una abstracción que facilita la gestión de un estado compartido en un proceso de Elixir.

Cuando usas las funciones del módulo Agent, lo habitual es encapsular las funciones relacionadas con el agente en un único módulo.

# A simple use of agent processes to represent a counter
defmodule Counter do
  def start_link(initial_value) do
    Agent.start(fn -> initial_value end)
  end

  def value(pid) do
    Agent.get(pid, & &1)
  end

  def increment(pid) do
    Agent.update(pid, &(&1 + 1))
  end
end

La decisión de usar el módulo Agent, o de usar varios procesos en general, depende de la relación que se quiera modelar con los datos. Los procesos agente son útiles cuando varios procesos necesitan usar un estado compartido.

A menudo es mejor opción evitar usar un proceso aparte y usar una variable dentro del propio proceso para mantener el estado en una función. También conviene tener cuidado y no tratarlos sin más como una variable global, ya que otros procesos pueden manipularlos y crear condiciones de carrera o errores imposibles de rastrear.

Si decides usar un proceso agente, el objetivo debería ser mantener un estado sencillo, encapsulando las llamadas al proceso agente en un módulo para organizar esas llamadas.

Si hay que hacer un trabajo costoso en otro proceso, conviene plantearte un proceso de tarea (usando Task). Si se determina que un proceso debe mantener estado y realizar comportamientos, conviene plantearte un proceso GenServer (usando GenServer).

Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Agent

La práctica está bloqueada

Desbloquea 1 ejercicio más para practicar Agent