Ag

Agent در Elixir

3 تمرین

درباره‌ی Agent

راه‌اندازی یک فرایند آسان است، اما مدیریت حالت و رفتار آن می‌تواند بسیار پیچیده شود. ماژول Agent یک انتزاع است که مدیریت یک حالت اشتراکی را در یک فرایند Elixir آسان می‌کند.

وقتی از توابع ماژول Agent استفاده می‌کنید، رسم بر این است که توابع مرتبط با Agent را در یک ماژول واحد کپسوله کنید.

# 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

انتخاب اینکه از ماژول Agent استفاده کنید یا اصلاً از چندین فرایند بهره ببرید، به رابطه‌ای بستگی دارد که قرار است با داده‌ها مدل شود.

فرایندهای Agent زمانی مفیدند که قرار باشد یک حالت اشتراکی توسط چندین فرایند استفاده شود.

اغلب انتخاب بهتری است که از یک فرایند جداگانه پرهیز کنید و به جای آن، از یک متغیر درون‌فرایندی برای نگه‌داشتن حالت در یک تابع استفاده کنید. همچنین باید مراقب بود که آن‌ها را کورکورانه مانند یک متغیر سراسری در نظر نگیرید، چرا که ممکن است فرایندهای دیگر آن‌ها را دستکاری کنند و شرایط رقابتی یا خطاهای غیرقابل‌ردیابی به وجود آورند.

اگر تصمیم می‌گیرید از یک فرایند Agent استفاده کنید، هدف باید نگه‌داشتن یک حالت ساده و کپسوله کردن فراخوانی‌های فرایند Agent درون یک ماژول برای ساماندهی آن‌ها باشد.

اگر قرار است کاری پرهزینه در فرایندی دیگر انجام شود، باید یک فرایند Task (با استفاده از Task) را در نظر بگیرید. اگر مشخص شد که یک فرایند باید حالت را نگه دارد و رفتارهایی انجام دهد، باید یک فرایند GenServer (با استفاده از GenServer) را در نظر بگیرید.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

Agent را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین Agent قفل 1 تمرین دیگر را باز کنید