Java 8 এ parallelSort() মেথড যোগ করা হয়েছে, যা arrays বা primitive arrays কে parallel (প্যারালাল) প্রসেসিংয়ের মাধ্যমে দ্রুত sort করতে সহায়ক। এটি ForkJoinPool ব্যবহার করে ডেটাকে একাধিক থ্রেডে ভাগ করে সঠিকভাবে দ্রুত sort করতে পারে। parallelSort() মেথডটি মুলত বড় ডেটাসেট বা অ্যারে গুলোতে কার্যকরী, কারণ এতে কোডের পারফরম্যান্স উন্নত হয়।
Parallel Sorting এর সুবিধা
- পারফরম্যান্স বৃদ্ধি: যখন অ্যারে খুব বড় হয়, তখন প্যারালাল প্রসেসিং দ্বারা দ্রুততার সাথে ডেটা সোর্ট করা সম্ভব হয়।
- কমপ্লেক্সিটি হ্রাস:
parallelSort()মেথডটি স্বয়ংক্রিয়ভাবে সমস্ত প্রসেসিং সঠিকভাবে করে, যার ফলে ডেভেলপারকে ম্যানুয়ালি থ্রেড তৈরি করতে হয় না।
১. প্রাথমিক ধারণা
Arrays.parallelSort() মেথডটি অ্যারের এলিমেন্টগুলিকে parallel প্রসেসিংয়ের মাধ্যমে সাজানোর জন্য ব্যবহৃত হয়। এটি একই ধরণের ডেটা টাইপের অ্যারে সোজা সাজিয়ে দেয়। এই পদ্ধতি Java-র ForkJoinPool ব্যবহার করে কাজ করে।
Syntax:
Arrays.parallelSort(array);এটি অ্যারে array কে প্যারালাল প্রসেসিংয়ের মাধ্যমে সাজিয়ে দেয়।
২. Parallel Sort এর উদাহরণ
এখানে একটি উদাহরণ দেয়া হল যেখানে একটি অ্যারে প্যারালাল সোর্ট করা হবে:
import java.util.Arrays;
public class ParallelSortExample {
public static void main(String[] args) {
// একটি বড় অ্যারে তৈরি করা
int[] numbers = {10, 5, 3, 12, 8, 15, 7, 1, 9, 6, 2, 4, 14, 13, 11};
// Parallel sort এর মাধ্যমে অ্যারে সোর্ট করা
System.out.println("Before sorting:");
for (int num : numbers) {
System.out.print(num + " ");
}
Arrays.parallelSort(numbers);
System.out.println("\nAfter parallel sort:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}আউটপুট:
Before sorting:
10 5 3 12 8 15 7 1 9 6 2 4 14 13 11
After parallel sort:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15এখানে, Arrays.parallelSort() ব্যবহার করে আমরা অ্যারে numbers-কে প্যারালাল প্রসেসিংয়ের মাধ্যমে সোজা সাজিয়ে দিয়েছি। এটি ForkJoinPool ব্যবহার করে একাধিক থ্রেডে কাজ করে, যা সাধারণ sequential sort এর তুলনায় দ্রুত হয়।
৩. Parallel Sorting Using Custom Comparator
এখন, যদি আপনি অ্যারেকে কাস্টম ক্রাইটেরিয়া বা Comparator ব্যবহার করে প্যারালাল সোর্ট করতে চান, তাহলে সেটি করতে পারবেন। নিচের উদাহরণে আমরা অ্যারে গুলিকে descending (অবতরণী) অর্ডারে সাজিয়েছি।
import java.util.Arrays;
import java.util.Comparator;
public class ParallelSortWithComparator {
public static void main(String[] args) {
// একটি অ্যারে তৈরি করা
Integer[] numbers = {10, 5, 3, 12, 8, 15, 7, 1, 9, 6, 2, 4, 14, 13, 11};
// Parallel sort with custom comparator (descending order)
System.out.println("Before sorting:");
for (int num : numbers) {
System.out.print(num + " ");
}
// Comparator ব্যবহার করে descending order-এ sort
Arrays.parallelSort(numbers, Comparator.reverseOrder());
System.out.println("\nAfter parallel sort (descending):");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}আউটপুট:
Before sorting:
10 5 3 12 8 15 7 1 9 6 2 4 14 13 11
After parallel sort (descending):
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1এখানে, Comparator.reverseOrder() ব্যবহার করে অ্যারের উপাদানগুলো descending অর্ডারে সাজানো হয়েছে।
৪. Performance Comparison Between Sequential and Parallel Sort
যখন অ্যারের সাইজ বড় হয়, তখন parallelSort() সাধারণত sequentialSort() এর চেয়ে দ্রুত হয়। নিচে একটি পারফরম্যান্স কম্প্যারিসন উদাহরণ দেয়া হলো:
import java.util.Arrays;
public class ParallelVsSequentialSort {
public static void main(String[] args) {
int size = 1000000; // অ্যারের সাইজ
int[] numbers = new int[size];
// অ্যারে পূর্ণ করা
for (int i = 0; i < size; i++) {
numbers[i] = (int) (Math.random() * size);
}
long startTime, endTime;
// Sequential sort
startTime = System.nanoTime();
Arrays.sort(numbers); // Sequential sort
endTime = System.nanoTime();
System.out.println("Time taken by Sequential Sort: " + (endTime - startTime) + " ns");
// Randomize array again
for (int i = 0; i < size; i++) {
numbers[i] = (int) (Math.random() * size);
}
// Parallel sort
startTime = System.nanoTime();
Arrays.parallelSort(numbers); // Parallel sort
endTime = System.nanoTime();
System.out.println("Time taken by Parallel Sort: " + (endTime - startTime) + " ns");
}
}এই কোডটি sequentialSort() এবং parallelSort() এর মধ্যে পারফরম্যান্স তুলনা করবে। যেহেতু অ্যারের সাইজ বড়, parallelSort() অনেক দ্রুত কাজ করবে।
৫. যতটুকু ব্যবহার করা উচিত
- Small Arrays: ছোট অ্যারে গুলোর জন্য
parallelSort()ব্যবহার করলে কোনও পারফরম্যান্স উন্নতি ঘটবে না, কারণ প্যারালাল প্রসেসিং-এর খরচ বড় অ্যারেগুলির জন্য বেশি হয়ে দাঁড়ায়। - Large Arrays: বড় অ্যারে বা বৃহৎ ডেটাসেটের জন্য parallelSort() অনেক বেশি কার্যকরী, কারণ এটি multi-core processors ব্যবহার করে ডেটা দ্রুত প্রসেস করতে পারে।
সারসংক্ষেপ
parallelSort()হল Java 8-এর একটি শক্তিশালী মেথড যা বড় অ্যারে গুলিকে প্যারালাল প্রসেসিংয়ের মাধ্যমে দ্রুত সঠিকভাবে সজ্জিত করতে সহায়তা করে।- এটি ForkJoinPool ব্যবহার করে কাজ করে, যেখানে ডেটা একাধিক থ্রেডে ভাগ হয়ে একসাথে প্রসেস করা হয়।
- ছোট অ্যারে বা ডেটাসেটের জন্য
Arrays.sort()(sequential sort) যথেষ্ট, তবে বড় ডেটাসেটের জন্যparallelSort()আরও কার্যকরী।
parallelSort() ব্যবহার করে আপনি আপনার অ্যারে সন্নিবেশ বা সজ্জা কার্যকরভাবে পরিচালনা করতে পারেন, বিশেষ করে যদি ডেটা বড় হয়।
Read more