Concurrency এবং Parallelism দুটি গুরুত্বপূর্ণ কনসেপ্ট যা সফটওয়্যার ডেভেলপমেন্ট এবং সিস্টেম ডিজাইন এর ক্ষেত্রে ব্যাপকভাবে ব্যবহৃত হয়। যদিও অনেক সময় এগুলিকে একে অপরের সাথে মিশিয়ে ব্যবহৃত হয়, তবে এদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে।
এই দুটি কনসেপ্ট মূলত কোড এক্সিকিউশন বা কোড পরিচালনা এবং টাস্ক এক্সিকিউশন এর মধ্যে ব্যবহৃত হয়। Concurrency এবং Parallelism বোঝাতে সাহায্য করে কিভাবে একাধিক কাজ (tasks) এক সাথে বা সমান্তরালে সম্পন্ন করা হতে পারে।
1. Concurrency (কনকারেন্সি)
Concurrency হল এক বা একাধিক প্রসেস বা থ্রেডের মধ্যে সময় ভাগাভাগি করার প্রক্রিয়া, যাতে তারা একই সময়ে কাজ করছে বলে মনে হয়। তবে, আসলে এক সময়ে একটি কাজের জন্য শুধুমাত্র একটি থ্রেড বা প্রসেসই কাজ করে, তবে দ্রুততার সাথে স্যুইচিং এর মাধ্যমে কনকারেন্ট কাজগুলো সম্পন্ন হয়।
Concurrency মূলত অভ্যন্তরীণ থ্রেড স্যুইচিং এর মাধ্যমে কাজ করে, যেখানে থ্রেডগুলির মধ্যে একে অপরকে অন্তর্বর্তীভাবে এক্সিকিউট করা হয়। এই প্রক্রিয়ায় একাধিক কাজ একটি নির্দিষ্ট সময়ের মধ্যে একসাথে করা হয়, তবে প্রতিটি কাজ একে অপরের সাথে কনকরেন্টলি সম্পন্ন হয়।
Concurrency এর কিছু বৈশিষ্ট্য:
- একাধিক কাজের মধ্যে সময় ভাগাভাগি করা হয়, তবে সব কাজ একসাথে এক্সিকিউট হয় না।
- এই প্রক্রিয়ায় থ্রেড স্যুইচিং বা টাস্ক স্যুইচিং ব্যবহার করা হয়।
- Concurrency সিস্টেমের রেসপন্সিভনেস বা প্রতিক্রিয়া বৃদ্ধি করতে সহায়ক।
উদাহরণ:
ধরা যাক, আপনার কাছে একটি ওয়েব অ্যাপ্লিকেশন আছে যা একাধিক ইউজারের রিকোয়েস্ট একসাথে গ্রহণ করছে। এখানে বিভিন্ন ইউজারের রিকোয়েস্ট একে একে সার্ভার দ্বারা প্রক্রিয়া করা হলেও, Concurrency এর মাধ্যমে তারা দ্রুত সার্ভার রিসোর্সের সাথে ভাগাভাগি করতে পারে এবং প্রতিটি ইউজারের রিকোয়েস্ট দ্রুত সাড়া পায়।
2. Parallelism (প্যারালেলিজম)
Parallelism হল একাধিক কাজ একসাথে, সামাজিকভাবে (simultaneously) এক্সিকিউট করার প্রক্রিয়া। এখানে একাধিক প্রসেস বা থ্রেড সঠিকভাবে সমান্তরালভাবে কাজ করে, অর্থাৎ একাধিক কাজের মধ্যে কোনো স্যুইচিং বা অন্তর্বর্তী প্রক্রিয়া না হয়ে একই সময়ে একাধিক কাজ একসাথে চলছে। এটি সাধারণত মাল্টি-কোর প্রসেসর বা মাল্টি-থ্রেডিং সিস্টেমে ব্যবহৃত হয়, যেখানে কাজগুলি সমান্তরালে একাধিক থ্রেডে সম্পন্ন করা হয়।
Parallelism আসলে Concurrency এর চেয়ে আরো বেশি অ্যাক্টিভ এবং একসাথে একাধিক কাজ সম্পাদন করার ক্ষমতা প্রদান করে। এখানে একাধিক প্রসেস বা থ্রেড বিভিন্ন কাজ একে অপরের সাথে সমান্তরালে এক্সিকিউট করে।
Parallelism এর কিছু বৈশিষ্ট্য:
- একাধিক কাজ একসাথে এক্সিকিউট করা হয় (সামাজিকভাবে)।
- একাধিক প্রসেসর বা কোর ব্যবহার করা হয় কাজের দ্রুততা বাড়ানোর জন্য।
- এই প্রক্রিয়ায় পারফরম্যান্স উন্নত করা সম্ভব হয়, কারণ কাজগুলি একাধিক থ্রেডে ভাগ করা যায়।
উদাহরণ:
যদি আপনার কাছে একটি বড় ডেটাসেট থাকে এবং আপনি সেটিকে প্রক্রিয়া করতে চান, তাহলে Parallelism ব্যবহারের মাধ্যমে আপনি ডেটাকে ভাগ করে একাধিক কোরে (অথবা থ্রেডে) একসাথে প্রক্রিয়া করতে পারেন। এতে কাজ দ্রুত সম্পন্ন হবে কারণ প্রতিটি কোর বা থ্রেড একটি নির্দিষ্ট অংশের জন্য দায়ী থাকবে।
Concurrency এবং Parallelism এর মধ্যে পার্থক্য
| প্যারামিটার | Concurrency | Parallelism |
|---|---|---|
| মূল ধারণা | একাধিক কাজকে একে অপরের সাথে সময় ভাগাভাগি করে একসাথে সম্পন্ন করা | একাধিক কাজকে একসাথে, সমান্তরালে এক্সিকিউট করা |
| কাজের সংখ্যা | এক সময় একক কাজ চলে, তবে দ্রুত স্যুইচ করা হয় | একসাথে একাধিক কাজ চলে |
| থ্রেড স্যুইচিং | থ্রেড স্যুইচিং মাধ্যমে কাজগুলো একে অপরের সাথে ভাগাভাগি করা হয় | একাধিক থ্রেড বা কোরের মাধ্যমে কাজ সমান্তরালে সম্পন্ন হয় |
| দ্রুততা | থ্রেড স্যুইচিং ধীর হতে পারে কারণ এটি একে একে কাজ সম্পন্ন করে | কাজ দ্রুত হয় কারণ একাধিক কাজ সমান্তরালে কাজ করছে |
| উদাহরণ | একাধিক ইউজার রিকোয়েস্ট একে একে প্রক্রিয়া করা | ডেটা প্যারালাল প্রসেসিং |
সারাংশ
Concurrency এবং Parallelism দুটি ভিন্ন কনসেপ্ট হলেও উভয়ই একাধিক কাজ সম্পন্ন করার প্রক্রিয়া সম্পর্কিত। Concurrency থ্রেড বা প্রসেসের মধ্যে সময় ভাগাভাগি করে কাজ করে, কিন্তু Parallelism একাধিক কাজ একে অপরের সাথে সমান্তরালে এক্সিকিউট করার প্রক্রিয়া। Concurrency সাধারণত লেজি প্রোগ্রামিং অথবা অ্যাসিঙ্ক্রোনাস কাজ পরিচালনা করতে ব্যবহৃত হয়, যেখানে Parallelism মাল্টি-কোর প্রসেসর বা থ্রেডে দ্রুত কাজ সম্পাদন করতে ব্যবহৃত হয়।
Read more