Ag

Agent en Elixir

3 ejercicios

Acerca de Agent

Aunque crear 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, es habitual encapsular las funciones relacionadas con el agente en un solo 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 incluso de usar varios procesos, depende de la relación que se quiera modelar con los datos. Los procesos agente son útiles cuando varios procesos deben usar un estado compartido.

A menudo es mejor evitar usar un proceso aparte y usar una variable interna del proceso para mantener el estado en una función. También hay que tener cuidado de no tratarlos ciegamente como una variable global, ya que otros procesos pueden manipularlos, lo que genera condiciones de carrera o errores imposibles de rastrear.

Si decides usar un proceso agente, el objetivo debe ser mantener un estado simple, encapsulando las llamadas al proceso agente dentro de un módulo para organizar las llamadas.

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

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

Aprende Agent

La práctica está bloqueada

Desbloquea 1 ejercicio más para practicar Agent