Ag

Agent em Elixir

3 exercícios

Sobre Agent

Criar um processo é fácil, mas gerenciar seu estado e seu comportamento pode ficar bem complicado. O módulo Agent é uma abstração que facilita o gerenciamento de um estado compartilhado em um processo Elixir.

Ao usar as funções do módulo Agent, é comum encapsular as funções relacionadas a agentes em um ú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

A escolha de usar o módulo Agent, ou de usar vários processos, depende da relação que você quer modelar com os dados. Os processos de agente são úteis quando vários processos precisam usar um mesmo estado compartilhado.

Muitas vezes, a melhor escolha é evitar um processo separado e guardar o estado em uma variável dentro do próprio processo, dentro de uma função. Também é preciso tomar cuidado para não tratá-los às cegas como uma variável global, já que outros processos podem manipulá-los, criando condições de corrida ou erros difíceis de rastrear.

Se você optar por usar um processo de agente, o objetivo deve ser manter um estado simples, encapsulando as chamadas ao processo de agente em um módulo para organizá-las.

Se um trabalho custoso precisar ser feito em outro processo, vale considerar um processo de tarefa (usando Task). Se for necessário que um processo guarde estado e execute comportamentos, vale considerar um processo GenServer (usando GenServer).

Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Agent

A prática está bloqueada

Desbloqueie mais 1 exercício para praticar Agent