Concurrency হলো একাধিক কাজ বা থ্রেড একসাথে সম্পাদন করার প্রক্রিয়া, যা প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ। Java এ concurrent programming সমর্থন করতে java.util.concurrent প্যাকেজে কিছু বিশেষ কোলেকশন ক্লাস রয়েছে, যেগুলি একাধিক থ্রেডের মধ্যে নিরাপদভাবে ডেটা ম্যানিপুলেশন করতে সহায়তা করে। এর মধ্যে ConcurrentHashMap এবং CopyOnWriteArrayList দুটি জনপ্রিয় কোলেকশন।
এখানে আমরা ConcurrentHashMap এবং CopyOnWriteArrayList কিভাবে কাজ করে এবং কিভাবে এগুলি concurrency এর জন্য ব্যবহার করা হয় তা আলোচনা করব।
1. ConcurrentHashMap
ConcurrentHashMap হল Map ইন্টারফেসের একটি থ্রেড-সেফ বাস্তবায়ন, যা concurrent access এর জন্য ডিজাইন করা হয়েছে। এটি একাধিক থ্রেডের মধ্যে ডেটা একসাথে রিড এবং রাইট করতে সক্ষম এবং একই সময়ে একাধিক থ্রেড Map এর মানে পরিবর্তন করলেও ডেটার consistent অবস্থান বজায় রাখে। এর মানে, আপনি একাধিক থ্রেড দিয়ে একই ConcurrentHashMap অবজেক্টে কাজ করতে পারেন, কিন্তু এতে কোনো সমস্যা হবে না, কারণ এটি partitioned locks ব্যবহার করে ডেটা অ্যাক্সেস নিয়ন্ত্রণ করে।
ব্যবহার:
- যখন আপনি একাধিক থ্রেডের মাধ্যমে একটি Map এ ডেটা রিড এবং রাইট করতে চান, তখন
ConcurrentHashMapএকটি নিরাপদ বিকল্প। - এটি একাধিক থ্রেডের মধ্যে ডেটা অ্যাক্সেসের জন্য high concurrency সরবরাহ করে এবং synchronization ম্যানেজমেন্টের জন্য নিজে থেকেই অনেক কাজ করে।
উদাহরণ:
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
// ConcurrentHashMap তৈরি করা
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
// একাধিক থ্রেড দিয়ে মান যোগ করা
map.put("Java", 100);
map.put("Python", 200);
map.put("C++", 150);
// ConcurrentHashMap থেকে মান অ্যাক্সেস করা
System.out.println("Java score: " + map.get("Java"));
System.out.println("Python score: " + map.get("Python"));
System.out.println("C++ score: " + map.get("C++"));
}
}
Output:
Java score: 100
Python score: 200
C++ score: 150
বৈশিষ্ট্য:
- Thread-Safety: একাধিক থ্রেডের মধ্যে অ্যাক্সেস নিরাপদে পরিচালনা করতে পারে।
- High Concurrency: একাধিক থ্রেড একযোগে ডেটা রিড এবং রাইট করতে সক্ষম।
- No Global Locking: এটি partitioned locks ব্যবহারের মাধ্যমে প্রতিটি অংশে আলাদা লক তৈরি করে, যাতে ডেটা অ্যাক্সেস দ্রুত হয়।
2. CopyOnWriteArrayList
CopyOnWriteArrayList হলো একটি থ্রেড-সেফ List ইন্টারফেসের বাস্তবায়ন যা write operations (যেমন add(), remove()) সম্পাদন করার সময় একটি নতুন কপি তৈরি করে। এর ফলে read operations থ্রেড-সেফ হয়ে থাকে এবং কোনো রকম concurrent modification exception দেখা দেয় না।
এটি খুবই উপকারী যখন আপনার লিস্টে বেশি পড়ার (read) কাজ হচ্ছে এবং কম লেখার (write) কাজ হচ্ছে। কারণ write operations গুলি কপি তৈরি করে এবং শুধুমাত্র সেই কপি পরিবর্তন হয়, মূল কন্টেন্ট অপরিবর্তিত থাকে।
ব্যবহার:
- এটি এমন সময় ব্যবহৃত হয় যখন আপনি অনেক বেশি reading অপারেশন করতে চান এবং কম writing অপারেশন থাকে, যেমন ক্যাশে সিস্টেমে।
উদাহরণ:
import java.util.concurrent.CopyOnWriteArrayList;
public class CopyOnWriteArrayListExample {
public static void main(String[] args) {
// CopyOnWriteArrayList তৈরি করা
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
// লিস্টে মান যোগ করা
list.add("Java");
list.add("Python");
list.add("C++");
// লিস্টের মান প্রিন্ট করা
for (String lang : list) {
System.out.println(lang);
}
// মান মুছে ফেলা
list.remove("Python");
// লিস্টের মান আবার প্রিন্ট করা
System.out.println("\nAfter removing Python:");
for (String lang : list) {
System.out.println(lang);
}
}
}
Output:
Java
Python
C++
After removing Python:
Java
C++
বৈশিষ্ট্য:
- Thread-Safety: একাধিক থ্রেড একযোগে read করতে পারে এবং write করার সময় কপি তৈরি করে, যা থ্রেডের মাঝে কোনো রকমের সমস্যা সৃষ্টি করে না।
- Copy on Write: যখনই একটি write operation ঘটে, তখন একটি নতুন কপি তৈরি করা হয়, ফলে read অপারেশনগুলো থ্রেড-সেফ থাকে।
- Memory Overhead: write operations সময় অতিরিক্ত মেমরি ব্যবহৃত হতে পারে কারণ নতুন কপি তৈরি হয়।
ConcurrentHashMap এবং CopyOnWriteArrayList এর মধ্যে পার্থক্য
| Feature | ConcurrentHashMap | CopyOnWriteArrayList |
|---|---|---|
| Data Structure | Key-value pair (Map) | List (Ordered collection) |
| Thread-Safety | High concurrency with thread-safety | Thread-safety through copying on write |
| Operations | Supports both read and write operations | Supports read operations, write creates a new copy |
| Write Operations | Thread-safe with partitioned locks | Write operations create a new copy of the list |
| Use Case | When high concurrency for map is needed | When reading is frequent, and writes are rare |
| Memory Overhead | Low (Efficient concurrency management) | Higher (due to copy-on-write mechanism) |
Use Cases:
- ConcurrentHashMap:
- Caching: যখন একাধিক থ্রেডে ডেটা রিড এবং রাইট করতে হয়, এবং ডেটার উপর অনেক কনকারেন্ট এক্সেস দরকার হয়।
- Session Management: একাধিক থ্রেডে সেশন ডেটা রিড এবং আপডেট করার ক্ষেত্রে নিরাপত্তা এবং কর্মক্ষমতা নিশ্চিত করার জন্য।
- CopyOnWriteArrayList:
- Caching: যখন ডেটা বারবার পড়া হয় এবং লেখার কার্যাবলী কম থাকে, যেমন read-heavy অ্যাপ্লিকেশন।
- Event Handling: যেখানে বেশিরভাগ সময় read (যেমন, ইভেন্ট লিস্টেনিং) করা হয় এবং ইভেন্টটি খুব কম সজ্জন করা হয়।
ConcurrentHashMapএবংCopyOnWriteArrayListদুটি কনকারেন্ট ডেটা স্ট্রাকচার, তবে তাদের পার্থক্য রয়েছে data access pattern এবং write operations এর ওপর।ConcurrentHashMapউচ্চ কনকারেন্ট রিড এবং রাইট অপারেশনগুলির জন্য ব্যবহৃত হয় এবং এটি partitioned locks ব্যবহার করে ডেটা নিরাপদ রাখে।CopyOnWriteArrayListতখন উপকারী যখন read-heavy অ্যাপ্লিকেশন থাকে, কারণ এটি write operations এর জন্য নতুন কপি তৈরি করে এবং থ্রেড-সেফভাবে ডেটা রিড করা যায়।
এই দুটি কোলেকশন থ্রেড-সেফ কনকারেন্ট প্রোগ্রামিংয়ের জন্য কার্যকরী এবং ব্যবহারকারীকে দ্রুত ডেটা ম্যানিপুলেশন করতে সহায়তা করে।
Read more