spawn, send, এবং receive এর মাধ্যমে প্রক্রিয়া পরিচালনা

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

296

Erlang-এ spawn, send, এবং receive এর মাধ্যমে প্রক্রিয়া (process) পরিচালনা

Erlang একটি কনকারেন্ট প্রোগ্রামিং ভাষা যা প্রক্রিয়া (process) ভিত্তিক, অর্থাৎ এটি একাধিক কাজ বা প্রোগ্রাম একসাথে চালানোর ক্ষমতা রাখে। Erlang-এর spawn, send, এবং receive এর মাধ্যমে বিভিন্ন প্রক্রিয়া তৈরি এবং বার্তা প্রেরণ/গ্রহণ করা হয়, যা একে একটি শক্তিশালী কনকারেন্ট সিস্টেমে পরিণত করে।

এই তিনটি কমান্ড মূলত কনকারেন্ট (একাধিক প্রক্রিয়া চলমান) প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়, যেখানে প্রতিটি প্রক্রিয়া একে অপরের সাথে যোগাযোগ করতে পারে এবং স্বতন্ত্রভাবে কাজ করতে পারে।


1. spawn (নতুন প্রক্রিয়া তৈরি)

spawn একটি Erlang ফাংশন যা একটি নতুন প্রক্রিয়া (process) শুরু করে। এটি একটি ফাংশন বা কোডের ব্লক চালাতে একটি নতুন প্রসেস তৈরি করে এবং সেই প্রসেসের একটি প্রক্রিয়া আইডি (PID) ফেরত দেয়।

spawn এর সিনট্যাক্স:

Pid = spawn(ModuleName, FunctionName, Arguments).

এখানে:

  • ModuleName: যেই মডিউলে ফাংশনটি আছে।
  • FunctionName: ফাংশনের নাম।
  • Arguments: ফাংশনের আর্গুমেন্টস।

উদাহরণ:

-module(my_process).
-export([start/0, print_message/1]).

start() ->
    Pid = spawn(my_process, print_message, ["Hello, Erlang!"]),
    io:format("New process started with PID: ~p~n", [Pid]).

print_message(Message) ->
    io:format("Received message: ~s~n", [Message]).

এখানে, start/0 ফাংশন নতুন একটি প্রক্রিয়া তৈরি করছে, যা print_message/1 ফাংশন চালাবে এবং একটি বার্তা গ্রহণ করবে। spawn এর মাধ্যমে নতুন প্রক্রিয়া তৈরি করা হচ্ছে।

1> c(my_process).
{ok,my_process}
2> my_process:start().
New process started with PID: <0.36.0>
Received message: "Hello, Erlang!"

এখানে start/0 ফাংশন কল করলে, একটি নতুন প্রক্রিয়া print_message/1 চালাবে এবং সেটি একটি বার্তা প্রদর্শন করবে।


2. send (বার্তা প্রেরণ)

send ব্যবহার করে আপনি একটি প্রসেসকে একটি বার্তা পাঠাতে পারেন। বার্তাটি প্রক্রিয়ার PID (প্রক্রিয়া আইডি) ব্যবহার করে পাঠানো হয়। Erlang এ প্রসেসের মধ্যে বার্তা প্রেরণ সাধারণত অ্যাসিঙ্ক্রোনাস হয়ে থাকে, অর্থাৎ প্রক্রিয়া বার্তা পেয়ে কাজ শুরু করে এবং এর পরবর্তী কাজ প্রক্রিয়া করতে থাকে।

send এর সিনট্যাক্স:

send(Pid, Message).

এখানে:

  • Pid: প্রক্রিয়ার আইডি যেখানে বার্তা পাঠানো হবে।
  • Message: প্রেরিত বার্তা।

উদাহরণ:

-module(message_sender).
-export([start/0, send_message/1]).

start() ->
    Pid = spawn(message_sender, send_message, [self()]),
    send(Pid, {message, "Hello from main process!"}),
    receive
        {reply, Msg} -> io:format("Received reply: ~s~n", [Msg])
    after 5000 -> io:format("Timeout: No reply received~n")
    end.

send_message(Pid) ->
    receive
        {message, Msg} -> 
            io:format("Received message: ~s~n", [Msg]),
            send(Pid, {reply, "Message received!"})
    end.

এখানে:

  • send(Pid, {message, "Hello from main process!"}): Pid-এ একটি বার্তা পাঠানো হচ্ছে।
  • receive ব্লকটি {message, Msg} বার্তা গ্রহণ করবে এবং send(Pid, {reply, "Message received!"}) এর মাধ্যমে একটি প্রতিক্রিয়া পাঠাবে।
1> c(message_sender).
{ok,message_sender}
2> message_sender:start().
Received message: "Hello from main process!"
Received reply: "Message received!"

এখানে, মূল প্রসেস বার্তা পাঠায় এবং একটি প্রতিক্রিয়া (reply) গ্রহণ করে।


3. receive (বার্তা গ্রহণ)

receive ব্লকটি Erlang প্রোগ্রামে একটি প্রসেসকে বার্তা গ্রহণ করতে সাহায্য করে। একটি প্রসেস receive ব্লক ব্যবহার করে অন্যান্য প্রসেসের কাছ থেকে মেসেজ গ্রহণ করতে পারে এবং সেই অনুযায়ী কাজ করতে পারে। এটি blocking operation, অর্থাৎ যখন একটি প্রসেস receive ব্লকে থাকে, তখন সেটি বার্তা না পাওয়া পর্যন্ত অপেক্ষা করে।

receive এর সিনট্যাক্স:

receive
    Pattern1 -> Expression1;
    Pattern2 -> Expression2;
    ...
end

এখানে, প্রতিটি Pattern এর সাথে মেলানো হলে সংশ্লিষ্ট Expression কার্যকরী হয়।

উদাহরণ:

-module(message_receiver).
-export([start/0, receive_message/0]).

start() ->
    Pid = spawn(message_receiver, receive_message, []),
    send(Pid, {greet, "Hello from main process!"}),
    io:format("Message sent to receiver process~n").

receive_message() ->
    receive
        {greet, Msg} -> io:format("Receiver got message: ~s~n", [Msg]);
        _ -> io:format("Unknown message received~n")
    end.

এখানে:

  • receive_message/0 ফাংশনটি মেসেজ গ্রহণ করার জন্য receive ব্লক ব্যবহার করছে।
  • {greet, Msg} প্যাটার্নে মেসেজের ধরন অনুযায়ী কাজ হবে।
1> c(message_receiver).
{ok,message_receiver}
2> message_receiver:start().
Message sent to receiver process
Receiver got message: "Hello from main process!"

এখানে, receive ব্লকটি {greet, Msg} প্যাটার্নে বার্তা গ্রহণ করে এবং আউটপুট প্রদর্শন করে।


উপসংহার

Erlang-এর spawn, send, এবং receive ফাংশনগুলি প্রক্রিয়া পরিচালনা এবং বার্তা প্রেরণ/গ্রহণের জন্য অত্যন্ত গুরুত্বপূর্ণ।

  • spawn ব্যবহার করে নতুন প্রক্রিয়া তৈরি করা হয়।
  • send ব্যবহার করে একটি প্রক্রিয়াকে অন্য একটি প্রক্রিয়া থেকে বার্তা পাঠানো হয়।
  • receive ব্যবহার করে একটি প্রক্রিয়া অন্য প্রক্রিয়া থেকে বার্তা গ্রহণ করে।

এই তিনটি ফাংশন concurrent programming এর মূল ভিত্তি এবং এটি Erlang-এর message-passing মডেলকে কার্যকরী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...