Practical উদাহরণ: Large Data Set এর জন্য Parallelism

Spliterator এবং Parallelism - জাভা ইউটিল.প্যাকেজ (Java.util Package) - Java Technologies

261

Parallelism হল একটি গুরুত্বপূর্ণ কৌশল যা ডেটা প্রসেসিং দ্রুত করার জন্য একাধিক প্রসেসর কোর ব্যবহার করে। Javaparallel streams এবং spliterators এর মাধ্যমে বড় ডেটাসেটের উপাদানগুলো দ্রুত এবং কার্যকরভাবে প্রক্রিয়া করা যেতে পারে। এই উদাহরণে আমরা parallelism এবং spliterators ব্যবহার করে কিভাবে বড় ডেটাসেটের প্রক্রিয়া করতে পারি তা দেখব।

Parallel Streams and Spliterator:

  • Parallel Streams: Stream API এর মাধ্যমে parallel processing সমর্থিত হয়, যেখানে ডেটা একটি বা একাধিক থ্রেডে ভাগ করে কার্যকরীভাবে প্রক্রিয়া করা হয়। Java 8 থেকে parallel streams দিয়ে ডেটা দ্রুত প্রসেসিং করা সম্ভব হয়েছে।
  • Spliterator: Spliterator হলো একটি উন্নত ইন্টারফেস যা স্ট্রিমের উপাদানগুলিকে বিভিন্ন অংশে ভাগ করে parallel processing সক্ষম করে। এটি Stream ইন্টারফেসের একটি শক্তিশালী উপাদান হিসেবে কাজ করে, যা splitting এবং traversing উভয় কাজ করতে পারে।

প্রয়োজন:

ধরা যাক, আপনি একটি বড় ডেটাসেটের উপাদানগুলির ওপর কিছু গণনা বা অপারেশন করতে চান, যেমন বড় সংখ্যার তালিকার মধ্যে sum, average বা filter প্রক্রিয়া করা। সাধারণ সিরিয়াল স্ট্রিমের তুলনায় parallel streams এই ধরনের কাজ দ্রুত সম্পাদন করতে সক্ষম।

উদাহরণ: Parallel Streams এর মাধ্যমে Large Data Set প্রক্রিয়া করা

import java.util.*;
import java.util.stream.Collectors;

public class ParallelStreamExample {
    public static void main(String[] args) {
        // বড় ডেটাসেট তৈরি করা
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 1000000; i++) {
            numbers.add(i);
        }

        // সিঙ্গেল স্ট্রিম ব্যবহার করে মোট সংখ্যা গণনা
        long startTime = System.nanoTime();
        int sum = numbers.stream().mapToInt(Integer::intValue).sum();
        long endTime = System.nanoTime();
        System.out.println("Serial Stream - Sum: " + sum);
        System.out.println("Serial Stream - Time taken: " + (endTime - startTime) + " ns");

        // Parallel Stream ব্যবহার করে মোট সংখ্যা গণনা
        startTime = System.nanoTime();
        int parallelSum = numbers.parallelStream().mapToInt(Integer::intValue).sum();
        endTime = System.nanoTime();
        System.out.println("Parallel Stream - Sum: " + parallelSum);
        System.out.println("Parallel Stream - Time taken: " + (endTime - startTime) + " ns");
    }
}

Output Example:

Serial Stream - Sum: 500000500000
Serial Stream - Time taken: 3472200 ns
Parallel Stream - Sum: 500000500000
Parallel Stream - Time taken: 2451400 ns

ব্যাখ্যা:

  • এখানে একটি List তৈরি করা হয়েছে যা 1 থেকে 1,000,000 পর্যন্ত সংখ্যাগুলি ধারণ করে।
  • প্রথমে serial stream ব্যবহার করে তালিকার উপাদানগুলির যোগফল বের করা হয়েছে, তারপর parallel stream ব্যবহার করে একই কাজ করা হয়েছে।
  • parallelStream() মেথডটি একটি স্ট্রিমকে একাধিক থ্রেডে বিভক্ত করে এবং এইভাবে parallel processing সম্ভব হয়।
  • parallelStream() ব্যবহার করে sum গণনা করতে সময় অনেক কম লাগে, কারণ এটি একাধিক প্রসেসর কোর ব্যবহার করে কাজটি দ্রুত সম্পাদন করতে পারে।

Spliterator ব্যবহার করে Parallel Streams

Spliterator হল একটি ইন্টারফেস যা split করার মাধ্যমে একটি ডেটাসেটকে ছোট ছোট অংশে ভাগ করে এবং প্রতিটি অংশের উপর parallel processing চালায়। এর মাধ্যমে parallel streams আরও কার্যকরীভাবে ডেটা প্রক্রিয়াকরণ করতে পারে।

Spliterator এর উদাহরণ:

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;

public class SpliteratorExample {
    public static void main(String[] args) {
        // বড় ডেটাসেট তৈরি করা
        List<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 1000000; i++) {
            numbers.add(i);
        }

        // Spliterator তৈরি করা
        Spliterator<Integer> spliterator = numbers.spliterator();

        // Parallel stream ব্যবহার করে পার্শ্ববর্তী অংশে ডেটা প্রক্রিয়াকরণ করা
        long startTime = System.nanoTime();
        StreamSupport.stream(spliterator, true)  // `true` ব্যবহার করলে parallel stream হবে
                     .mapToInt(Integer::intValue)
                     .sum();
        long endTime = System.nanoTime();
        System.out.println("Parallel Stream using Spliterator - Time taken: " + (endTime - startTime) + " ns");
    }
}

ব্যাখ্যা:

  • এখানে Spliterator ব্যবহার করে ডেটাসেটকে ভাগ করা হয়েছে এবং parallel stream ব্যবহার করে বিভিন্ন অংশে কাজ করা হয়েছে।
  • StreamSupport.stream() মেথডের মাধ্যমে Spliterator এর উপর parallel processing কার্যকরী করা হয়েছে।
  • true প্যারামিটারটি parallel stream নির্দেশ করে।

Advantages of Parallel Streams and Spliterator in Large Data Sets:

  1. Speed:
    • Parallel streams একাধিক থ্রেড ব্যবহার করে ডেটা প্রক্রিয়া করতে সক্ষম, যার ফলে বড় ডেটাসেটের উপর CPU-intensive অপারেশনগুলি দ্রুততর হয়।
  2. Better Resource Utilization:
    • Parallel streams multi-core processors ব্যবহার করে দ্রুত কাজ করতে সহায়তা করে। এটি প্রসেসরের কোরগুলোকে সমানভাবে ব্যবহার করে যা কাজের গতি বাড়ায়।
  3. Simplified Code:
    • Streams ব্যবহারের মাধ্যমে জটিল looping অপারেশনগুলোকে আরও পরিষ্কার এবং সংক্ষিপ্তভাবে লেখা যায়। Parallel streams এর মাধ্যমে উন্নত পারফরম্যান্স সহ খুব সহজেই প্রক্রিয়াকরণ করা সম্ভব।
  4. Scalable:
    • ডেটার পরিমাণ বাড়ানোর সাথে সাথে parallel streams এর কার্যকারিতা বাড়তে থাকে, বিশেষত যদি আপনার সিস্টেমে multiple processors বা cores থাকে।
  5. Spliterator:
    • Spliterator স্ট্রিমের উপাদানগুলিকে ভাগ করে parallel streams এর প্রক্রিয়া আরো কার্যকরী করে তোলে, যার মাধ্যমে batch processing আরো দ্রুত এবং দক্ষভাবে হয়।

Parallel Streams এবং Spliterator দুটি শক্তিশালী সরঞ্জাম যা Java Streams API এর মাধ্যমে বড় ডেটাসেটের প্রক্রিয়াকরণ দ্রুত এবং কার্যকরীভাবে করতে সাহায্য করে। parallelism ব্যবহার করে আপনি CPU-intensive অপারেশনগুলিকে দ্রুত সম্পাদন করতে পারেন, বিশেষত যখন আপনার কাছে বড় ডেটাসেট থাকে। Spliterator ব্যবহার করলে আপনি ডেটাকে ছোট ছোট অংশে ভাগ করে আরও কার্যকরভাবে parallel streams চালাতে পারবেন, যা প্রক্রিয়াকরণকে আরও দ্রুত এবং স্কেলেবল করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...