এজ

এজেন্ট মধ্যে Elixir

3টি অনুশীলনী

এজেন্ট সম্পর্কে

একটি প্রসেস স্পন করা সহজ হলেও তার স্টেট ও আচরণ সামলানো খুব জটিল হয়ে উঠতে পারে। 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 প্রসেস (Task ব্যবহার করে) বিবেচনা করা উচিত। আর যদি স্থির করা হয় যে একটি প্রসেসের স্টেট ধরে রাখা ও আচরণ সম্পাদন করা উচিত, তাহলে GenServer প্রসেস (GenServer ব্যবহার করে) বিবেচনা করা উচিত।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

এজেন্ট শিখুন

অনুশীলন লক করা আছে

এজেন্ট অনুশীলন করতে আরও ১টি অনুশীলনী আনলক করুন