Ag

Agent en Elixir

3 exercices

À propos de Agent

Lancer un processus est facile, mais gérer son état et son comportement peut devenir très compliqué. Le module Agent est une abstraction qui facilite la gestion d'un état partagé dans un processus Elixir.

Quand on utilise les fonctions du module Agent, il est d'usage d'encapsuler les fonctions liées à l'agent dans un seul module.

# 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

Le choix d'utiliser le module Agent, ou même d'utiliser plusieurs processus, dépend de la relation que l'on souhaite modéliser avec les données. Les processus Agent sont utiles quand un état partagé doit être utilisé par plusieurs processus.

Il est souvent préférable d'éviter d'utiliser un processus séparé et de conserver l'état dans une variable locale à l'intérieur d'une fonction. Il faut aussi se garder de les traiter aveuglément comme une variable globale, car d'autres processus peuvent les manipuler, ce qui crée des conditions de concurrence ou des erreurs impossibles à tracer.

Si l'on choisit d'utiliser un processus Agent, l'objectif est de conserver un état simple, en encapsulant les appels au processus Agent dans un module pour organiser ces appels.

Si un travail coûteux doit être effectué dans un autre processus, il convient d'envisager un processus Task (en utilisant Task). S'il s'avère qu'un processus doit conserver un état et exécuter des comportements, il convient d'envisager un processus GenServer (en utilisant GenServer).

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Agent

L'entraînement est verrouillé

Déverrouille 1 exercice de plus pour t'entraîner sur Agent