Ag

Agent in Elixir

3 esercizi

Informazioni su Agent

Sebbene avviare un processo sia facile, gestirne lo stato e il comportamento può diventare molto complicato. Il modulo Agent è un'astrazione per facilitare la gestione di uno stato condiviso in un processo Elixir.

Quando si usano le funzioni del modulo Agent, è consuetudine incapsulare le funzioni relative all'Agent in un singolo modulo.

# 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 scelta di usare il modulo Agent, o di usare più processi in generale, dipende dalla relazione che si vuole modellare con i dati. I processi Agent sono utili quando uno stato condiviso deve essere usato da più processi.

Spesso è meglio evitare di usare un processo separato e usare una variabile all'interno del processo per conservare lo stato in una funzione. Bisogna anche fare attenzione a non trattarli ciecamente come una variabile globale, poiché potrebbero essere manipolati da altri processi, creando condizioni di race, o errori non tracciabili.

Se si sceglie di usare un processo Agent, l'obiettivo dovrebbe essere quello di mantenere uno stato semplice, incapsulando le chiamate al processo Agent all'interno di un modulo per organizzare le chiamate.

Se un lavoro costoso dovesse essere svolto in un altro processo, si dovrebbe prendere in considerazione un processo Task (usando Task).

Se si determina che un processo dovrebbe mantenere stato e svolgere comportamenti, si dovrebbe prendere in considerazione un processo GenServer (usando GenServer).

Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Agent

La pratica è bloccata

Sblocca un altro esercizio per esercitarti su Agent