प्रोसेस बनाना आसान है, लेकिन उस प्रोसेस की स्थिति और व्यवहार संभालना बहुत जटिल हो सकता है। Agent मॉड्यूल एक एब्स्ट्रैक्शन है जो Elixir प्रोसेस में साझा स्थिति को संभालना आसान बनाता है।
जब 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 मॉड्यूल इस्तेमाल करना है या कई प्रोसेस इस्तेमाल करने हैं, यह इस बात पर निर्भर करता है कि डेटा के साथ किस संबंध को मॉडल करना है। एजेंट प्रोसेस तब उपयोगी होते हैं जब कई प्रोसेस को साझा स्थिति इस्तेमाल करनी हो।
अक्सर बेहतर यही होता है कि अलग प्रोसेस इस्तेमाल करने से बचा जाए और फंक्शन में स्थिति रखने के लिए प्रोसेस के अंदर के वेरिएबल का इस्तेमाल किया जाए। इन्हें आँख मूँदकर ग्लोबल वेरिएबल मान लेने से भी सावधान रहना चाहिए, क्योंकि दूसरे प्रोसेस इन्हें बदल सकते हैं, जिससे रेस कंडीशन या ऐसी एरर बन सकती हैं जिनका पता नहीं चलता।
अगर आप एजेंट प्रोसेस इस्तेमाल करना चुनें, तो लक्ष्य यह होना चाहिए कि आप साधारण स्थिति रखें और कॉलों को व्यवस्थित करने के लिए एजेंट प्रोसेस के कॉलों को एक मॉड्यूल के अंदर समाहित कर दें।
अगर कोई महँगा काम किसी दूसरे प्रोसेस में करना हो, तो टास्क प्रोसेस (जो Task इस्तेमाल करता है) पर विचार करना चाहिए। अगर यह तय हो कि किसी प्रोसेस को स्थिति रखनी है और व्यवहार निभाने हैं, तो GenServer प्रोसेस (जो GenServer इस्तेमाल करता है) पर विचार करना चाहिए।