Threads এবং Processes হল কম্পিউটারের সিস্টেমে একাধিক কাজ একযোগে চালানোর (concurrent execution) জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ ধারণা। যদিও তারা একে অপরের সাথে সম্পর্কিত, তবে তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে।
রুবিতে Threads এবং Processes ব্যবহৃত হয় কোডের একাধিক অংশকে একসাথে রান করতে, যার ফলে প্রোগ্রাম দ্রুত এবং দক্ষভাবে কাজ করতে পারে।
Processes (প্রসেস)
Process হল একটি প্রোগ্রামের এক্সিকিউটিং (চলমান) কপি। যখন একটি প্রোগ্রাম রান করা হয়, তখন এটি একটি প্রসেস তৈরি করে। প্রতিটি প্রসেসের নিজস্ব মেমরি স্পেস (address space), প্রোগ্রাম কাউন্টার, রেজিস্টার, এবং অন্যান্য সম্পদ থাকে। একাধিক প্রসেস একে অপরের থেকে সম্পূর্ণ পৃথক থাকে এবং তারা সাধারণত একে অপরের মেমরি অ্যাক্সেস করতে পারে না।
Process এর বৈশিষ্ট্য:
- একটি একক প্রসেসে একটি অ্যাড্রেস স্পেস থাকে: প্রতিটি প্রসেস আলাদা মেমরি ব্যবহার করে এবং অন্য প্রসেসের মেমরি অ্যাক্সেস করতে পারে না (except for shared memory areas).
- প্রসেস ম্যানেজমেন্ট: অপারেটিং সিস্টেম প্রসেসের জন্য রিসোর্স বরাদ্দ করে এবং সেগুলির মধ্যে যোগাযোগ এবং সমন্বয় (synchronization) নিয়ন্ত্রণ করে।
- প্রসেস প্রক্রিয়া: একাধিক প্রসেস একসাথে রান হতে পারে, কিন্তু তারা সম্পূর্ণভাবে পৃথক থাকে এবং একে অপরকে প্রভাবিত করে না।
উদাহরণ:
ধরা যাক, আপনি একটি ওয়েব সার্ভার চালাচ্ছেন যা একাধিক HTTP রিকোয়েস্ট প্রসেস করে। এখানে, প্রতিটি HTTP রিকোয়েস্টকে একটি পৃথক প্রসেস হিসেবে ভাবা যেতে পারে।
রুবি দিয়ে প্রসেস তৈরি:
pid = Process.fork
if pid.nil?
# Child process
puts "This is the child process"
else
# Parent process
puts "This is the parent process"
endএখানে, Process.fork ব্যবহার করে একটি নতুন প্রসেস তৈরি করা হয়েছে। এটি মূল প্রসেসের একটি কপি তৈরি করে, যেখানে পরবর্তীতে আলাদা কোড এক্সিকিউট করা হয়।
Threads (থ্রেডস)
Thread হল একটি ছোট একক এক্সিকিউটিং ইউনিট, যা একটি প্রসেসের মধ্যে রান করে। থ্রেড একটি প্রসেসের অংশ হিসেবে কাজ করে এবং প্রসেসের মেমরি স্পেস শেয়ার করে, তবে এটি অন্যান্য থ্রেডের থেকে আলাদা কোড চালায়। একাধিক থ্রেড একসাথে চলতে পারে, যার ফলে একই প্রোগ্রাম একাধিক কাজ (tasks) করতে সক্ষম হয়।
Thread এর বৈশিষ্ট্য:
- একাধিক থ্রেড একই মেমরি শেয়ার করে: একটি থ্রেডের জন্য মেমরি বরাদ্দ থাকে না; বরং এটি প্রসেসের মধ্যে মেমরি শেয়ার করে। থ্রেডের মধ্যে থাকা ডেটা একই প্রক্রিয়ায় অ্যাক্সেস করা যেতে পারে।
- কম্পিউটার রিসোর্সের জন্য কম খরচ: থ্রেডের মধ্যে যোগাযোগ আরও দ্রুত হয় কারণ তারা একই মেমরি শেয়ার করে, তাই থ্রেডে সিঙ্ক্রোনাইজেশন করতে হয়।
- থ্রেড পুল: একাধিক থ্রেড ব্যবহার করে কাজটি দ্রুত করা যেতে পারে, বিশেষত অনেক ছোট কাজ একসাথে করতে হলে।
উদাহরণ:
ধরা যাক, একটি প্রোগ্রাম যেটি ফাইল থেকে ডেটা পড়ে এবং সেই ডেটা প্রসেস করে। এখানে, আপনি আলাদা থ্রেড ব্যবহার করতে পারেন, যাতে ফাইল পড়া এবং ডেটা প্রসেসিং একসাথে চলতে পারে।
রুবি দিয়ে থ্রেড তৈরি:
thread1 = Thread.new do
5.times { |i| puts "Thread 1: #{i}" }
end
thread2 = Thread.new do
5.times { |i| puts "Thread 2: #{i}" }
end
thread1.join
thread2.joinএখানে, দুটি আলাদা থ্রেড (thread1 এবং thread2) তৈরি করা হয়েছে, যা তাদের নিজস্ব কাজ করছে। join মেথডটি ব্যবহার করে আমরা থ্রেডগুলোর কাজ শেষ হওয়া পর্যন্ত অপেক্ষা করি।
Threads এবং Processes এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Processes | Threads |
|---|---|---|
| মেমরি | আলাদা মেমরি স্পেস | একই মেমরি স্পেস শেয়ার করে |
| সম্পদ ব্যবস্থাপনা | আলাদা প্রসেসের জন্য আলাদা রিসোর্স | একাধিক থ্রেড একই রিসোর্স শেয়ার করে |
| কমিউনিকেশন | একাধিক প্রসেসের মধ্যে যোগাযোগ কঠিন | থ্রেডগুলো সহজে একে অপরের সাথে যোগাযোগ করতে পারে |
| পারফরম্যান্স | প্রসেস শুরু করতে বেশি রিসোর্স প্রয়োজন | থ্রেড শুরু করতে কম রিসোর্স প্রয়োজন |
| প্রসেস ম্যানেজমেন্ট | অপারেটিং সিস্টেম প্রসেস ম্যানেজমেন্ট পরিচালনা করে | থ্রেড ম্যানেজমেন্ট পরিচালনা করা আরও সহজ |
Threads এবং Processes এর ব্যবহার
- Threads:
- সিঙ্ক্রোনাস কাজের জন্য, যেমন একাধিক কাজ একসাথে করার জন্য, যেমন ফাইল অপারেশন, নেটওয়ার্ক কল ইত্যাদি।
- ডেটা প্রসেসিং বা ইভেন্ট লুপ সিস্টেমের জন্য উপযুক্ত।
- Processes:
- যখন সম্পূর্ণ আলাদা কাজ চলতে হবে, যেমন একটি বড় অ্যাপ্লিকেশন যা একাধিক কাজ পরিচালনা করে, যেমন একাধিক ইউজারের জন্য পৃথক সেশন পরিচালনা।
রুবিতে Threads এবং Processes এর কার্যকারিতা
রুবি থ্রেড এবং প্রসেস ব্যবহার করার সুবিধা হল:
- Threads: একাধিক কাজ একসাথে চালাতে পারেন, যেমন ফাইল পড়া এবং লেখা।
- Processes: একাধিক কোড একসাথে রান করতে পারেন, যা পৃথক মেমরি স্পেস এবং সম্পদ ব্যবহারের মাধ্যমে নির্দিষ্ট কাজ সম্পাদন করতে সক্ষম।
রুবি থ্রেড এবং প্রসেস ব্যবহারের মাধ্যমে আপনি আপনার প্রোগ্রামকে আরও কার্যকর এবং দ্রুত করতে পারেন।
Read more