Coroutines এবং Threads উভয়ই প্রোগ্রামিং ভাষায় পারলাল কার্যকলাপ (concurrency) পরিচালনা করতে ব্যবহৃত হয়, তবে এদের কাজের পদ্ধতি এবং ব্যবহারের ক্ষেত্রে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। লুয়া ভাষায় coroutines ব্যবহৃত হয়, এবং threads মূলত অন্যান্য ভাষার, বিশেষত মাল্টি-থ্রেডিং সিস্টেমে ব্যবহৃত হয়।
এখানে, আমরা coroutines এবং threads এর মধ্যে পার্থক্য এবং তাদের ব্যবহারের ক্ষেত্রে প্রধান ভিন্নতা বিশ্লেষণ করব।
১. Coroutines
Coroutines কী?
Coroutines হল বিশেষ ধরনের ফাংশন যেগুলি "রানটাইমে" তাদের কার্যকলাপ (execution) সাসপেন্ড (pause) এবং রিজিউম (resume) করতে পারে। এটি একসাথে অনেকগুলি কার্যকলাপ পরিচালনা করার জন্য ব্যবহৃত হয় এবং সাধারণত একটি থ্রেডের মধ্যে কাজ করে। এর মাধ্যমে প্রোগ্রামিংয়ের স্ট্রাকচার আরও সিম্পল এবং আরও দক্ষ হয়। Coroutines মাল্টি-থ্রেডিংয়ের মতো কাজ করে না, বরং এটি একটি সিঙ্গেল থ্রেডে একাধিক কাজ সমান্তরালে করতে সহায়তা করে।
লুয়াতে Coroutines:
লুয়া ভাষায় coroutines তৈরি করার জন্য coroutine.create, coroutine.resume, coroutine.yield ফাংশন ব্যবহার করা হয়।
উদাহরণ:
function testCoroutine()
print("Start of coroutine")
coroutine.yield() -- Coroutine yields execution
print("Resumed coroutine")
end
co = coroutine.create(testCoroutine)
print("Main thread")
coroutine.resume(co) -- First time, starts coroutine
coroutine.resume(co) -- Second time, resumes coroutineএখানে:
- প্রথম
coroutine.resume(co)কল করলেtestCoroutineফাংশনটি শুরু হয়, তারপরcoroutine.yieldফাংশন কল হয় যা coroutine এর execution কে সাসপেন্ড করে। - দ্বিতীয়
coroutine.resume(co)কল করলে coroutine পুনরায় চলতে থাকে এবং "Resumed coroutine" প্রিন্ট হয়।
Coroutines এর সুবিধা:
- কম্প্যাক্ট এবং সহজ: Coroutines সহজেই তৈরি এবং পরিচালনা করা যায়।
- এফিসিয়েন্ট: এগুলি কম্পিউটেশনালভাবে কম ওভারহেড সৃষ্টি করে, কারণ এগুলি সিঙ্গেল থ্রেডে একাধিক কাজের সিমুলেশন করতে পারে।
- কোড ফ্লো কন্ট্রোল: অ্যাসিনক্রোনাস কার্যকলাপ পরিচালনা করার জন্য এটি সহজ ও কার্যকর।
২. Threads
Threads কী?
Threads হল পৃথক execution units যা একই প্রোগ্রাম বা অ্যাপ্লিকেশনের মধ্যে বিভিন্ন কাজের অংশ একযোগে চালাতে ব্যবহৃত হয়। থ্রেডগুলি বাস্তবে সিস্টেম লেভেল অবজেক্ট এবং একাধিক থ্রেড চালানোর জন্য অপারেটিং সিস্টেমের মাল্টি-থ্রেডিং সাপোর্ট প্রয়োজন।
Threads এর ব্যবহার:
থ্রেডগুলি বিভিন্ন কাজকে একাধিক CPU কোরে ভাগ করে সিমল্টেনিয়াসলি চালাতে সক্ষম। যেমন, একটি অ্যাপ্লিকেশন UI আপডেট করতে পারে এবং অন্য থ্রেডে ব্যাকগ্রাউন্ডে ডেটা প্রসেস করতে পারে।
উদাহরণ (থ্রেডস ব্যবহারের জন্য):
লুয়া মূলত মাল্টি-থ্রেডিং সাপোর্ট করে না, তবে অন্যান্য ভাষায় যেমন Python, C++, Java ইত্যাদিতে থ্রেড ব্যবহার করা হয়।
import threading
def print_numbers():
for i in range(5):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join() # Wait for the thread to finishএখানে Python এ থ্রেড ব্যবহার করা হয়েছে, যেখানে print_numbers ফাংশনটি পৃথক থ্রেডে চলে এবং মূল থ্রেডের সাথে সমান্তরালে কাজ করে।
Threads এর সুবিধা:
- প্যারালাল এক্সিকিউশন: বিভিন্ন কাজ একই সময়ে চালানো সম্ভব, যা পারফরম্যান্স বাড়াতে সাহায্য করে।
- এফিসিয়েন্ট মাল্টি-টাস্কিং: CPU কোরগুলো ব্যবহারের মাধ্যমে দ্রুত সমাধান প্রদান করে।
৩. Coroutines এবং Threads এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Coroutines | Threads |
|---|---|---|
| অধিকার | সিঙ্গেল থ্রেডে রান করে | একাধিক থ্রেডে রান করতে পারে |
| ইনস্ট্যান্স | থ্রেডের মতো আলাদা পৃথক ইনস্ট্যান্স তৈরি হয় না | প্রতিটি থ্রেড আলাদা একটি এক্সিকিউশন ইউনিট |
| পাওয়ার | এক থ্রেডের মধ্যে একাধিক কাজকে সিমুলেট করে | একাধিক থ্রেডের মধ্যে ভিন্ন ভিন্ন কাজ একই সময়ে চালানো সম্ভব |
| অপারেশন পদ্ধতি | yield এবং resume দিয়ে সাসপেন্ড এবং রিজিউম করা হয় | থ্রেডের মাধ্যমে কাজগুলি একযোগে (প্যারালাল) চলে |
| অপারেটিং সিস্টেম | থ্রেড সিস্টেম ব্যবহার করে না, শুধুমাত্র লুয়া লেভেলে | থ্রেডগুলি সিস্টেম পর্যায়ে এক্সিকিউট হয় |
| ফ্লো কন্ট্রোল | সিরিয়াল ফ্লো কন্ট্রোল (সিঙ্ক্রোনাস) | প্যারালাল ফ্লো কন্ট্রোল (অ্যাসিনক্রোনাস) |
| অপারেশন সিঙ্ক | কোডটির ফ্লো ম্যানুয়ালি নিয়ন্ত্রণ করা হয় | অপারেটিং সিস্টেমের থ্রেড ম্যানেজমেন্ট দ্বারা পরিচালিত হয় |
সারসংক্ষেপ
- Coroutines হল লুয়া ভাষায় একাধিক কাজকে একসাথে (একক থ্রেডে) চালানোর উপায়। এটি সহজ এবং কোডের ফ্লোকে সঠিকভাবে নিয়ন্ত্রণ করতে সাহায্য করে। তবে, এটি আসল মাল্টি-থ্রেডিং নয় এবং একসাথে প্রকৃত সমান্তরাল কার্যকলাপ পরিচালনা করতে সক্ষম নয়।
- Threads হল অপারেটিং সিস্টেম দ্বারা ব্যবহৃত মাল্টি-থ্রেডিং সিস্টেম, যা প্রকৃত প্যারালাল এক্সিকিউশন সক্ষম করে এবং CPU কোর ব্যবহার করে। এটি বেশি প্যারোলাল কাজগুলো সমান্তরালে সম্পাদন করতে সক্ষম।
লুয়া ভাষায় coroutines ব্যবহার করা সাধারণত সহজ, তবে বাস্তব মাল্টি-থ্রেডিং এবং প্যারালাল কার্যকলাপের জন্য অন্য ভাষা বা লাইব্রেরি প্রয়োজন হতে পারে।
Read more