Process তৈরি এবং Message Passing

Concurrency in Elixir (কনকারেন্সি) - এলিক্সির (Elixir) - Computer Programming

321

Process তৈরি এবং Message Passing in Elixir

Elixir একটি concurrent এবং distributed প্রোগ্রামিং ভাষা যা Erlang Virtual Machine (BEAM) এর উপর ভিত্তি করে তৈরি। Elixir এর শক্তিশালী কনকারেন্সি মডেল এটি একাধিক প্রক্রিয়া (process) চালানোর মাধ্যমে খুব দ্রুত এবং কার্যকরভাবে কাজ করতে সাহায্য করে। এই প্রক্রিয়াগুলি lightweight হয় এবং তারা একে অপরের সাথে message passing মাধ্যমে যোগাযোগ করে। চলুন দেখি কিভাবে Elixir তে process তৈরি এবং message passing করা হয়।


Process তৈরি in Elixir

Elixir তে প্রতিটি কার্যক্রম একটি process হিসেবে চলতে থাকে। Elixir এর actor model অনুযায়ী, প্রতিটি প্রক্রিয়া স্বাধীনভাবে কাজ করে এবং তারা একে অপরের সাথে মেসেজ পাঠানোর মাধ্যমে যোগাযোগ করে। Elixir তে একটি প্রক্রিয়া শুরু করার জন্য spawn/1 বা spawn/3 ফাংশন ব্যবহার করা হয়।

Process তৈরির Syntax:

pid = spawn(fn -> IO.puts("Hello from the process!") end)

এখানে:

  • spawn/1 একটি নতুন প্রক্রিয়া তৈরি করে এবং সেটি একটি ফাংশন রান করবে।
  • pid হল নতুন প্রক্রিয়ার process identifier (PID), যা সেই প্রক্রিয়াটির একক চিহ্ন।

Process Creation Example:

defmodule MyProcess do
  def start do
    spawn(fn -> IO.puts("This is a new process!") end)
  end
end

MyProcess.start()

এখানে:

  • spawn/1 এর মাধ্যমে নতুন একটি প্রক্রিয়া তৈরি করা হয়েছে, যা "This is a new process!" মেসেজ প্রিন্ট করবে।

Creating a Process with Arguments:

defmodule MyProcess do
  def start do
    spawn(fn -> greet("Alice") end)
  end

  def greet(name) do
    IO.puts("Hello, #{name}!")
  end
end

MyProcess.start()

এখানে, greet/1 ফাংশনকে "Alice" নামের আর্গুমেন্ট পাঠানো হচ্ছে।


Message Passing in Elixir

Elixir এ message passing হল প্রক্রিয়াগুলির মধ্যে যোগাযোগের একমাত্র উপায়। যখন একটি প্রক্রিয়া অন্য প্রক্রিয়াকে মেসেজ পাঠায়, তখন তা একটি মেসেজ কোয়িউ (message queue) তে চলে যায় এবং প্রক্রিয়াটি যখন প্রস্তুত হয়, তখন মেসেজটি প্রাপ্ত হয় এবং প্রক্রিয়া তা প্রোসেস করতে পারে।

Message Passing Syntax:

send(pid, message)

এখানে:

  • send/2 ফাংশন একটি প্রক্রিয়াকে একটি মেসেজ পাঠানোর জন্য ব্যবহৃত হয়।
  • pid হল সেই প্রক্রিয়ার process identifier
  • message হল সেই প্রক্রিয়াকে পাঠানো মেসেজ।

Receiving a Message:

একটি প্রক্রিয়া message গ্রহণ করার জন্য receive ব্লক ব্যবহার করে।

receive do
  msg -> IO.puts("Received message: #{msg}")
end

এখানে:

  • receive ব্লকটি একে একে মেসেজগুলো গ্রহণ করে এবং যে মেসেজটি মেলে সেটি প্রক্রিয়া করে।

Message Passing Example

এখন, একটি উদাহরণ দেখা যাক যেখানে এক প্রক্রিয়া অন্য প্রক্রিয়াকে মেসেজ পাঠায় এবং তা প্রক্রিয়া করে।

defmodule MyModule do
  def start do
    pid = spawn(fn -> listen() end)
    send(pid, "Hello, Process!")
  end

  def listen do
    receive do
      message -> IO.puts("Received message: #{message}")
    end
  end
end

MyModule.start()

এখানে:

  • start/0 ফাংশনে প্রথমে একটি প্রক্রিয়া তৈরি করা হচ্ছে, যা listen/0 ফাংশনটি চালাবে।
  • পরে, send/2 ব্যবহার করে প্রক্রিয়াটিকে একটি মেসেজ ("Hello, Process!") পাঠানো হচ্ছে।
  • প্রক্রিয়াটি receive ব্লক দ্বারা মেসেজটি গ্রহণ করে এবং তা প্রিন্ট করে।

Multiple Messages Handling

একাধিক মেসেজ গ্রহণ করার জন্য আপনি receive ব্লকের মধ্যে একাধিক প্যাটার্ন ব্যবহার করতে পারেন।

defmodule MyModule do
  def start do
    pid = spawn(fn -> listen() end)
    send(pid, "Hello!")
    send(pid, "How are you?")
    send(pid, "Goodbye!")
  end

  def listen do
    receive do
      message -> IO.puts("Received: #{message}")
    end
    listen()  # Listen for the next message
  end
end

MyModule.start()

এখানে:

  • প্রথম মেসেজ "Hello!" পাঠানো হয়েছে, এরপর "How are you?" এবং "Goodbye!"।
  • প্রতিটি মেসেজের জন্য receive ব্লকটি প্রক্রিয়া করবে এবং পরবর্তী মেসেজের জন্য আবার নিজেকে রিকার্সিভভাবে কল করবে।

Process and Message Passing Summary

বৈশিষ্ট্যProcessMessage Passing
Process Creationspawn/1, spawn/3spawn(fn -> ... end)
Process IdentificationProcess ID (PID)Process ID (PID)
Communication MethodMessage passing via send/2 and receiveSending and receiving messages between processes
Message FormatCan be any data (atoms, strings, tuples, etc.)Messages are received as data and processed in receive block
ConcurrencyProcesses run concurrently and independentlyMultiple processes communicate asynchronously through message passing

Conclusion

Elixir তে process এবং message passing concurrency model এর মূল উপাদান। Elixir এ প্রক্রিয়াগুলি একে অপরের সাথে মেসেজ পাঠানোর মাধ্যমে যোগাযোগ করে এবং প্রক্রিয়া গুলি খুবই lightweight এবং দক্ষ। এটি Erlang এর বিখ্যাত কনকারেন্সি মডেলকে Elixir তে বাস্তবায়িত করেছে এবং খুব সহজে অ্যাসিনক্রোনাস টাস্ক পরিচালনা করতে সাহায্য করে।

Content added By
Promotion

Are you sure to start over?

Loading...