Java 7 এ পরিচিত Fork/Join Framework মাল্টিথ্রেডিং এবং পারালাল প্রসেসিংয়ের জন্য ব্যবহৃত একটি গুরুত্বপূর্ণ ফ্রেমওয়ার্ক, যা বড় কাজগুলিকে ছোট ছোট অংশে ভাগ করে প্যারালাল প্রসেসিংয়ের মাধ্যমে দ্রুত ফলাফল পাওয়ার জন্য ডিজাইন করা হয়েছে। Java 7 এ এটি কমপ্লেক্স টাস্কের কার্যকরী সমাধান প্রদান করতে সাহায্য করেছে এবং Java 8 ও তার পরবর্তী সংস্করণগুলিতে এর বেশ কিছু নতুন ফিচার যোগ করা হয়েছে, যা এর কার্যকারিতা এবং ব্যবহারের সুবিধা আরও বৃদ্ধি করেছে।
Fork/Join Framework এর মূল ধারণা:
Fork/Join Framework মূলত divide and conquer (ভাগ করে বিজয়) পদ্ধতির মাধ্যমে কাজ করে। এটি একটি বড় কাজকে ছোট ছোট টাস্কে ভাগ করে এবং প্রতিটি ছোট টাস্ককে আলাদা থ্রেডে প্রসেস করে। এরপর ফলাফলগুলিকে একত্রিত (join) করে মূল ফলাফল পাওয়া যায়।
Java 8 এবং পরবর্তী সংস্করণে Fork/Join Framework এর নতুন ফিচারসমূহ:
1. Parallel Streams (Java 8)
Java 8 এ Parallel Streams যুক্ত করা হয়েছে, যা Fork/Join Framework এর উপর ভিত্তি করে কাজ করে। Parallel streams-এর মাধ্যমে আপনি একটি স্ট্রীমকে প্যারালাল প্রসেসিংয়ে চালাতে পারেন, যাতে মাল্টি-কোর প্রসেসর ব্যবহারের সুবিধা পাওয়া যায়।
উদাহরণ:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = list.parallelStream().mapToInt(Integer::intValue).sum();
System.out.println("Sum: " + sum);এখানে, parallelStream() ব্যবহার করে স্ট্রীমের উপাদানগুলো প্যারালাল প্রসেসিংয়ের মাধ্যমে যোগ করা হচ্ছে।
2. RecursiveTask and RecursiveAction (Java 7)
Fork/Join Framework এ দুটি গুরুত্বপূর্ণ ক্লাস রয়েছে:
RecursiveTask<T>: এটি একটি টাস্ক যা কোনো মান ফেরত দেয়। এটি সাধারণত ডিভাইড এন্ড কনকার পদ্ধতিতে ব্যবহার হয়।RecursiveAction: এটি একটি টাস্ক যা কোনো মান ফেরত দেয় না, এবং সাইড এফেক্টের জন্য ব্যবহৃত হয়।
Java 8 এ এই ক্লাসগুলির ব্যবহার আরও সহজ এবং অ্যাপ্লিকেশনে তাদের ইনস্ট্যান্স তৈরি করা আরও দ্রুত হয়েছে।
উদাহরণ (RecursiveTask):
class FibonacciTask extends RecursiveTask<Integer> {
private final int n;
public FibonacciTask(int n) {
this.n = n;
}
@Override
protected Integer compute() {
if (n <= 1) {
return n;
} else {
FibonacciTask task1 = new FibonacciTask(n - 1);
FibonacciTask task2 = new FibonacciTask(n - 2);
task1.fork(); // Fork the task
task2.fork();
return task1.join() + task2.join(); // Join the results
}
}
}এখানে, fork() ও join() ব্যবহার করা হয়েছে, যা কাজটি পারালালভাবে বিভক্ত করে এবং ফলাফলগুলিকে একত্রিত (join) করে।
3. Work Stealing (Java 7 এবং পরবর্তী সংস্করণ)
Fork/Join Framework-এর একটি গুরুত্বপূর্ণ নতুন ফিচার হল work stealing। এটি কার্যকরভাবে থ্রেডের মধ্যে কাজ ভাগ করে, যেখানে একটি থ্রেড যদি তার কাজ সম্পন্ন করে, তবে এটি অন্য থ্রেড থেকে কাজ “চুরি” (steal) করে এবং সেই কাজ সম্পন্ন করে। এটি সিস্টেমের দক্ষতা এবং থ্রেডের ব্যবহারের পরিমাণ বৃদ্ধি করে।
উদাহরণ:
- যদি একটি থ্রেড তার কাজ শেষ করে এবং অন্য কোনো থ্রেডের কাজ অপেক্ষমাণ থাকে, তবে এটি সেই কাজ নিয়ে কাজ করবে।
4. ManagedBlocker (Java 8)
Java 8-এ ManagedBlocker যোগ করা হয়েছে, যা Fork/Join Framework এর মধ্যে কার্যকরভাবে ব্লকিং অপারেশন পরিচালনা করতে সহায়ক। এটি ব্লকিং অপারেশনের জন্য একটি ইন্টারফেস প্রদান করে, যেমন সিঙ্ক্রোনাস কনসাল্টেশন বা I/O অপারেশন যেখানে থ্রেডটি দীর্ঘ সময়ের জন্য ব্লক হতে পারে।
উদাহরণ:
ForkJoinPool.commonPool().submit(new ManagedBlocker() {
@Override
public boolean isReleasable() {
// Check whether the operation is complete
return false; // Return false for ongoing operation
}
@Override
public void block() throws InterruptedException {
// Perform blocking operation here
}
});5. ForkJoinPool Improvements (Java 8 এবং পরবর্তী সংস্করণ)
- Custom Thread Pool Configuration: Java 8 এবং পরবর্তী সংস্করণে, ForkJoinPool এর কনফিগারেশন সহজ হয়েছে, এবং আপনি চাইলে custom thread pool তৈরি করতে পারেন।
- ForkJoinPool.commonPool(): Java 8 থেকে একটি কমন ফর্ক/জয়েন পুল (common pool) যোগ করা হয়েছে যা সাধারণত অ্যাপ্লিকেশনগুলোতে ব্যবহৃত হয়।
উদাহরণ:
ForkJoinPool pool = new ForkJoinPool();
pool.submit(() -> {
// Parallel computation task
});
pool.shutdown();6. Better Debugging and Monitoring (Java 8 এবং পরবর্তী সংস্করণ)
Java 8 এবং পরবর্তী সংস্করণগুলিতে Fork/Join Framework এর মাধ্যমে পুলের কার্যকলাপ, থ্রেড ট্র্যাকিং এবং ডিবাগিং আরও সহজ হয়েছে। এটি JVM Monitoring Tools যেমন JVisualVM বা JConsole এর মাধ্যমে পারফরম্যান্স ট্র্যাক করতে সহায়ক।
উপসংহার
Fork/Join Framework, যা Java 7 তে প্রথম আনা হয়েছিল, তা Java 8 এবং পরবর্তী সংস্করণগুলিতে আরও উন্নত হয়েছে। এর মধ্যে Parallel Streams, ManagedBlocker, Work Stealing, এবং ForkJoinPool এর উন্নতি সহ আরও কিছু কার্যকরী বৈশিষ্ট্য যোগ করা হয়েছে, যা মাল্টিথ্রেডিং এবং প্যারালাল প্রসেসিংয়ের জন্য কাজগুলো আরও দ্রুত এবং দক্ষভাবে সম্পাদন করতে সক্ষম। Java 8 এবং পরবর্তী সংস্করণে Fork/Join Framework এর এই নতুন ফিচারগুলো ডেভেলপারদের জন্য আরও শক্তিশালী এবং স্কেলেবল মাল্টিথ্রেডিং সমাধান তৈরি করতে সাহায্য করেছে।
Read more