Erlang এ Message Passing এর ধারণা

Message Passing এবং Inter-Process Communication (IPC) - এরল্যাং (Erlang) - Computer Programming

392

Erlang এ Message Passing এর ধারণা

Message Passing হল Erlang এর concurrency model এর একটি গুরুত্বপূর্ণ অংশ, যা প্রসেসগুলির মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। Erlang এ, প্রতিটি প্রসেস আলাদাভাবে কাজ করে এবং মেমরি স্পেস শেয়ার না করে একে অপরের সাথে message passing এর মাধ্যমে তথ্য আদান-প্রদান করে। এই ধারণাটি Erlang এর process isolation এবং fault tolerance নিশ্চিত করতে সাহায্য করে, কারণ এক প্রসেসের ব্যর্থতা অন্য প্রসেসের ওপর প্রভাব ফেলবে না।

Message Passing এর মৌলিক ধারণা

  1. Processes:
    • Erlang এ, প্রতিটি কার্যক্রমকে একটি process হিসেবে দেখা হয়। প্রতিটি প্রসেস একটি স্বাধীন একক হিসেবে কাজ করে এবং নিজের ডেটা এবং স্টেট নিয়ে কাজ করে। একাধিক প্রসেসের মধ্যে যোগাযোগ বা তথ্য আদান-প্রদান করার জন্য message passing ব্যবহৃত হয়।
  2. Asynchronous Communication:
    • Erlang এ, message passing হচ্ছে asynchronous (অ্যাসিঙ্ক্রোনাস) যোগাযোগ, যার মানে হল যে, এক প্রসেস অন্য প্রসেসকে একটি বার্তা পাঠায়, এবং সেই প্রসেসের রেসপন্সের জন্য অপেক্ষা করে না। পাঠানো প্রসেসটি অব্যাহত থাকতে পারে এবং পরবর্তী কাজ করতে পারে, যখন বার্তাটি প্রাপ্ত প্রসেস তার own ডেটা প্রসেস করতে থাকে।
  3. No Shared Memory:
    • Erlang এর message passing মডেলটি shared memory থেকে মুক্ত, অর্থাৎ এক প্রসেস অন্য প্রসেসের মেমরি বা স্টেট অ্যাক্সেস করতে পারে না। বার্তা শুধুমাত্র মেসেজ পাসিংয়ের মাধ্যমে প্রেরিত হয়, যার মাধ্যমে একটি প্রসেসের ডেটা অন্য প্রসেসের কাছে পৌঁছায়।
  4. Immutable State:
    • Erlang এ, প্রতিটি প্রসেসের ডেটা অপরিবর্তনীয় (immutable) হয়, অর্থাৎ একবার সেট করা হলে, একটি প্রসেসের ডেটা পরিবর্তিত করা যায় না। যদি একটি প্রসেস তার স্টেট আপডেট করতে চায়, তা হলে একটি নতুন স্টেট তৈরি করা হয়।

Erlang এ Message Passing এর বৈশিষ্ট্য

  1. Message Types:
    • Erlang এ বার্তা প্রেরণকারী এবং প্রাপ্তকারী প্রসেসের মধ্যে সাধারণত বিভিন্ন ধরনের ডেটা পাঠানো হয়, যেমন atom, integer, tuple, list, এবং অন্যান্য ডেটা টাইপ।
    • বার্তা যেকোনো ধরনের ডেটা হতে পারে এবং এটি প্রসেসগুলির মধ্যে asynchronous ভাবে পাঠানো হয়।
  2. Mailbox:
    • Erlang এ প্রতিটি প্রসেস একটি mailbox ধারণ করে, যা প্রসেসের ইনবক্সের মতো কাজ করে। যখন একটি প্রসেস অন্য প্রসেস থেকে একটি বার্তা পাঠায়, সেই বার্তাটি সেই প্রসেসের mailbox এ পৌঁছায়।
    • প্রসেস তার mailbox থেকে বার্তা নিয়ে প্রক্রিয়া করতে থাকে। যদি একাধিক বার্তা থাকে, তাহলে প্রসেস সেগুলো একে একে প্রক্রিয়া করবে।
  3. Pattern Matching:
    • Erlang এর message passing মডেলে pattern matching ব্যবহার করা হয়। অর্থাৎ, যখন একটি প্রসেস একটি বার্তা গ্রহণ করে, তখন এটি বার্তার মধ্যে বিভিন্ন অংশের সাথে ম্যাচ করে এবং নির্দিষ্ট আর্গুমেন্টের ভিত্তিতে সঠিক কোড ব্লকটি চালায়।
  4. No Blocking:
    • Erlang এর message passing মডেল ব্লকিং ছাড়া কাজ করে, যার মানে হল যে একটি প্রসেস অন্য প্রসেসের বার্তা গ্রহণ করতে পারলেও, সেই বার্তা প্রাপ্তির পরেও এটি অপেক্ষা করতে থাকে না। এটি অন্যান্য কাজ অব্যাহত রাখতে সক্ষম করে।

Message Passing এর উদাহরণ

ধরা যাক, আমরা দুটি প্রসেস তৈরি করেছি যেখানে এক প্রসেস অন্য প্রসেসকে বার্তা পাঠায় এবং সেই প্রসেসটি সেই বার্তার ভিত্তিতে উত্তর দেয়।

উদাহরণ: Simple Message Passing

% sender.erl
-module(sender).
-export([send_message/1]).

send_message(Pid) -> 
    Pid ! {hello, "How are you?"}.

এখানে, send_message/1 ফাংশনটি একটি প্রসেসের (যার পিড Pid) কাছে একটি বার্তা পাঠাচ্ছে, যা একটি টিউপল {hello, "How are you?"}

% receiver.erl
-module(receiver).
-export([start/0, receive_message/0]).

start() -> 
    self() ! {ready, "I am ready to receive messages"},
    receive_message().

receive_message() -> 
    receive
        {hello, Msg} -> io:format("Received: ~s~n", [Msg]);
        _Other -> io:format("Unknown message~n")
    end.

এখানে, receive_message/0 ফাংশনটি একটি বার্তা গ্রহণ করে এবং যদি এটি {hello, Msg} প্যাটার্নের সাথে মেলে, তবে এটি বার্তাটি প্রিন্ট করে দেখাবে।

ব্যবহার:

1> c(sender).
{ok,sender}
2> c(receiver).
{ok,receiver}
3> Pid = spawn(receiver, start, []).
<0.53.0>
4> sender:send_message(Pid).
Received: How are you?

এখানে, sender মডিউল একটি বার্তা পাঠায় receiver মডিউলে এবং receiver সেই বার্তাটি গ্রহণ করে এবং আউটপুট হিসেবে Received: How are you? দেখায়।


Erlang এ Message Passing এর সুবিধা

  1. Concurrency: Erlang এর message passing মডেল প্রসেসগুলির মধ্যে সহজেই সমন্বয়ের মাধ্যমে concurrency নিশ্চিত করে। একাধিক প্রসেস একযোগে কাজ করতে পারে এবং non-blocking মেসেজ পাসিং এর মাধ্যমে সিস্টেমের কার্যক্ষমতা উন্নত হয়।
  2. Fault Tolerance: প্রসেসগুলির মধ্যে মেসেজ পাসিং মাধ্যমে যোগাযোগ করলে, এক প্রসেসের ত্রুটি অন্য প্রসেসের কাজকে প্রভাবিত করে না। এটি fault tolerance তৈরি করে, যেখানে একটি প্রসেস ব্যর্থ হলেও, অন্যান্য প্রসেস চলতে থাকে।
  3. Scalability: Erlang এর message passing মডেল সহজেই স্কেল করা যায়। একাধিক প্রসেসের মধ্যে বার্তা পাসিংয়ের মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেম তৈরি করা সহজ হয়।
  4. Isolation: Erlang এ প্রতিটি প্রসেস আলাদা মেমরি স্পেসে চলে, এবং মেসেজ পাসিং-এর মাধ্যমে বার্তা আদান প্রদান করা হয়। এটি process isolation নিশ্চিত করে, যা সিস্টেমের স্থায়িত্ব এবং নিরাপত্তা বাড়ায়।

উপসংহার

Message Passing Erlang এর concurrency মডেল এবং distributed systems এর অন্যতম মূল স্তম্ভ। এটি প্রসেসগুলির মধ্যে যোগাযোগের জন্য ব্যবহৃত একটি অত্যন্ত শক্তিশালী মডেল যা fault tolerance, scalability, এবং concurrency নিশ্চিত করতে সাহায্য করে। Erlang এর মেসেজ পাসিং মডেল সম্পূর্ণ asynchronous এবং non-blocking, যা সিস্টেমকে আরও দক্ষ এবং স্থিতিস্থাপক করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...