C++ এ Concurrency এবং Parallel Processing খুবই গুরুত্বপূর্ণ ধারণা যা মাল্টি-থ্রেডিং এবং মাল্টি-কোর প্রসেসিংয়ের মাধ্যমে কাজের গতি এবং দক্ষতা বাড়াতে সাহায্য করে।
- Concurrency (একাধিক কাজের সমান্তরাল চালনা) হল এক সময়ে একাধিক কাজ শুরু করা, যদিও সেগুলো একসাথে চলতে পারে না। তবে Parallel Processing (সত্যিকারের সমান্তরাল প্রক্রিয়া) হল একসাথে একাধিক কাজ চালানো, যেখানে প্রতিটি কাজ একটি আলাদা থ্রেড বা প্রসেসে সম্পন্ন হয় এবং একে অপরের সাথে একযোগে কাজ করে।
1. Concurrency:
C++ এ Concurrency বাস্তবায়নের জন্য std::thread লাইব্রেরি ব্যবহার করা হয়, যা একাধিক থ্রেড তৈরি করে এবং তাদের একসাথে একাধিক কাজ করতে সক্ষম করে। একটি সাধারণ থ্রেড তৈরি করতে std::thread ব্যবহার করা হয়, এবং যখন থ্রেডগুলি একে অপরের সাথে সমন্বয়ে কাজ করে, তখন সেটা concurrent execution হিসেবে গণ্য হয়।
উদাহরণ: Concurrency in C++ with std::thread
#include <iostream>
#include <thread>
#include <chrono>
void task1() {
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << "Task 1 complete!" << std::endl;
}
void task2() {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Task 2 complete!" << std::endl;
}
int main() {
// Start two tasks concurrently using threads
std::thread t1(task1); // Start task1
std::thread t2(task2); // Start task2
t1.join(); // Wait for task1 to finish
t2.join(); // Wait for task2 to finish
std::cout << "All tasks are complete." << std::endl;
return 0;
}আউটপুট:
Task 2 complete!
Task 1 complete!
All tasks are complete.এখানে, std::thread ব্যবহার করা হয়েছে দুটি আলাদা কাজকে (Task 1 এবং Task 2) একযোগে চালানোর জন্য। এই দুইটি কাজ একে অপরের সাথে সমান্তরালে চলে, যদিও প্রথম কাজটি 2 সেকেন্ড সময় নেয় এবং দ্বিতীয় কাজটি 1 সেকেন্ড সময় নেয়, তবুও কাজগুলি একে অপরের সাথে সমান্তরালভাবে সম্পন্ন হয়।
2. Parallel Processing:
Parallel Processing বাস্তবায়নে std::thread এর ব্যবহার হতে পারে, কিন্তু এটি অনেক সময় আরও উন্নত কৌশল যেমন std::async বা parallel algorithms (যেমন C++17 এ অন্তর্ভুক্ত) দিয়ে সম্পন্ন করা হয়, যেখানে একাধিক কাজ একাধিক প্রসেসর কোরে সম্পন্ন হয়।
উদাহরণ: Parallel Processing with std::async
C++11 এবং পরবর্তী সংস্করণে std::async ব্যবহার করে সহজে প্যারালাল প্রসেসিং করা যেতে পারে। std::async একটি অ্যাসিঙ্ক্রোনাস কাজ চালু করে এবং এটি ভবিষ্যতের (future) মাধ্যমে কাজের ফলাফল ফিরে দেয়।
#include <iostream>
#include <future>
#include <chrono>
int task1() {
std::this_thread::sleep_for(std::chrono::seconds(2));
return 5;
}
int task2() {
std::this_thread::sleep_for(std::chrono::seconds(1));
return 10;
}
int main() {
// Start two tasks in parallel using std::async
std::future<int> result1 = std::async(std::launch::async, task1); // Launch task1 asynchronously
std::future<int> result2 = std::async(std::launch::async, task2); // Launch task2 asynchronously
// Get the results of the tasks
std::cout << "Task 1 result: " << result1.get() << std::endl; // Get result of task1
std::cout << "Task 2 result: " << result2.get() << std::endl; // Get result of task2
std::cout << "All tasks are complete." << std::endl;
return 0;
}আউটপুট:
Task 2 result: 10
Task 1 result: 5
All tasks are complete.এখানে, std::async ব্যবহার করা হয়েছে task1 এবং task2 কে একযোগে (parallel) চালানোর জন্য। std::future এর মাধ্যমে প্রতিটি কাজের ফলাফল পাওয়া যায়।
3. Parallel Algorithms:
C++17 এ parallel algorithms এর জন্য একটি নতুন API যোগ করা হয়েছে, যা std::execution::par (parallel execution policy) ব্যবহার করে যে কোনো অ্যালগরিদমের মধ্যে প্যারালাল প্রসেসিং কার্যকরী করে তোলে। এই লাইব্রেরি standard algorithms যেমন std::sort, std::for_each ইত্যাদির মধ্যে প্যারালাল প্রসেসিং ব্যবহার করতে সাহায্য করে।
উদাহরণ: Parallel Sorting with std::sort (C++17)
#include <iostream>
#include <vector>
#include <algorithm>
#include <execution> // For parallel algorithms
int main() {
std::vector<int> numbers = {9, 7, 5, 11, 13, 2, 3};
// Use parallel execution policy to sort the vector
std::sort(std::execution::par, numbers.begin(), numbers.end());
std::cout << "Sorted numbers: ";
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}আউটপুট:
Sorted numbers: 2 3 5 7 9 11 13এখানে std::execution::par ব্যবহৃত হয়েছে যাতে std::sort প্যারালালভাবে কাজ করতে পারে এবং দ্রুততম সময়ে সংখ্যাগুলি সাজানো যায়।
4. Concurrency এবং Parallelism এর পার্থক্য
- Concurrency: এক বা একাধিক কাজ একে অপরের সাথে সমন্বয়ে সম্পন্ন হয়, তবে একটি সময়ে শুধুমাত্র একটি কাজ চলতে পারে। একাধিক কাজ একসাথে শুরু হয়, তবে প্রক্রিয়া সময়ে তারা একে অপরের সাথে ভাগাভাগি করে কাজ করে (যেমন থ্রেডিং)।
- Parallelism: একাধিক কাজ একযোগে সম্পন্ন হয়, অর্থাৎ তারা পৃথক থ্রেডে বা প্রসেসর কোরে চলে, যা সাধারণত মাল্টি-কোর প্রসেসর ব্যবহার করে।
উপসংহার
- Concurrency এবং Parallelism C++ প্রোগ্রামিংয়ে গুরুত্বপূর্ণ ভূমিকা পালন করে এবং একাধিক কাজ একে অপরের সাথে সমন্বয় রেখে এবং একযোগে কার্যকরভাবে চালানোর জন্য ব্যবহৃত হয়।
- std::thread, std::async, এবং std::execution::par এর মাধ্যমে C++ এ concurrency এবং parallelism কার্যকরভাবে বাস্তবায়ন করা যায়।
- C++ এ concurrency এবং parallelism ব্যবহারের মাধ্যমে বড় সিস্টেমে কর্মক্ষমতা এবং দ্রুত প্রক্রিয়াকরণের জন্য সুবিধা পাওয়া যায়।
Read more