Multithreading এবং Parallelism এর মধ্যে পার্থক্য

Java Concurrency এর পরিচিতি - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

344

জাভা কনকারেন্সি এমন একটি ধারণা যেখানে একাধিক কাজ বা থ্রেড একসাথে চলতে পারে। Multithreading এবং Parallelism এই ধারণার দুটি মূল অংশ। এদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে:


১. Multithreading

  • সংজ্ঞা: Multithreading হলো একাধিক থ্রেডের মাধ্যমে একটি প্রোগ্রামে কনকারেন্টলি কাজ করার পদ্ধতি। এটি সাধারণত একটি সিঙ্গল প্রসেসরের মধ্যে কাজ করে।
  • মূল বৈশিষ্ট্য:
    • একটি অ্যাপ্লিকেশনে একাধিক থ্রেড চালানো হয়।
    • থ্রেডগুলি একে অপরের সাথে শেয়ার করা মেমরি স্পেস ব্যবহার করে।
    • কাজগুলোর মধ্যে সময় ভাগাভাগি (Time-Slicing) করে কাজ করে।
    • উদ্দেশ্য: Responsiveness এবং ইন্টারঅ্যাকটিভিটি বৃদ্ধি করা।
  • উদাহরণ কোড:
class MyThread extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(Thread.currentThread().getName() + " - " + i);
        }
    }
}

public class MultithreadingExample {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();

        t1.start(); // Thread-1
        t2.start(); // Thread-2
    }
}

২. Parallelism

  • সংজ্ঞা: Parallelism হলো একাধিক প্রসেসর বা কোর ব্যবহার করে একই সময়ে একাধিক কাজ চালানো। এটি প্রকৃতপক্ষে কাজগুলোকে একই সঙ্গে সম্পন্ন করে।
  • মূল বৈশিষ্ট্য:
    • একাধিক কোর বা প্রসেসরের সাথে কাজ করে।
    • কাজগুলিকে ছোট ছোট অংশে ভাগ করে একসাথে প্রসেস করা হয়।
    • উদ্দেশ্য: Performance এবং Efficiency বৃদ্ধি করা।
  • উদাহরণ কোড (Fork/Join Framework):
import java.util.concurrent.RecursiveTask;
import java.util.concurrent.ForkJoinPool;

class SumTask extends RecursiveTask<Integer> {
    private final int[] array;
    private final int start, end;
    private static final int THRESHOLD = 10;

    public SumTask(int[] array, int start, int end) {
        this.array = array;
        this.start = start;
        this.end = end;
    }

    @Override
    protected Integer compute() {
        if (end - start <= THRESHOLD) {
            int sum = 0;
            for (int i = start; i < end; i++) {
                sum += array[i];
            }
            return sum;
        } else {
            int mid = (start + end) / 2;
            SumTask leftTask = new SumTask(array, start, mid);
            SumTask rightTask = new SumTask(array, mid, end);

            leftTask.fork();
            return rightTask.compute() + leftTask.join();
        }
    }
}

public class ParallelismExample {
    public static void main(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < array.length; i++) {
            array[i] = i + 1;
        }

        ForkJoinPool pool = new ForkJoinPool();
        SumTask task = new SumTask(array, 0, array.length);
        int result = pool.invoke(task);
        System.out.println("Sum: " + result);
    }
}

Multithreading vs Parallelism: তুলনামূলক পার্থক্য

প্যারামিটারMultithreadingParallelism
সংজ্ঞাএকই প্রসেসরের মধ্যে একাধিক থ্রেডের মাধ্যমে কাজ করা।একাধিক প্রসেসর বা কোর ব্যবহার করে কাজ করা।
ConcurrencyConcurrency অর্জন করতে ব্যবহৃত।Concurrency এবং Performance বৃদ্ধি করতে ব্যবহৃত।
Execution Modelএকাধিক কাজ টাইম-স্লাইসিং এর মাধ্যমে চলে।একাধিক কাজ একসাথে প্রসেস হয়।
Hardware DependencySingle-core প্রসেসরেও কাজ করে।Multi-core প্রসেসরের প্রয়োজন।
Complexityতুলনামূলকভাবে সহজ।তুলনামূলকভাবে জটিল।
উদাহরণUI Responsiveness, File I/O Operations।Data Processing, Machine Learning Tasks।

  • Multithreading বেশি কার্যকর যখন কনকারেন্ট অপারেশন প্রয়োজন হয়।
  • Parallelism বেশি কার্যকর যখন বিশাল ডেটা সেট বা কম্পিউটেশনাল কাজ একসাথে প্রসেস করতে হয়।

জাভাতে উভয় ধারণাই গুরুত্বপূর্ণ এবং প্রয়োজন অনুযায়ী একসঙ্গে ব্যবহার করা যেতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...