ArrayBlockingQueue এবং LinkedBlockingQueue এর মধ্যে পার্থক্য

Concurrent Collections - জাভা কনকারেন্সি (Java Concurrency) - Java Technologies

297

ArrayBlockingQueue এবং LinkedBlockingQueue উভয়ই BlockingQueue ইন্টারফেসের ইমপ্লিমেন্টেশন, যা Producer-Consumer Problem এর মতো সিঙ্ক্রোনাইজড ডেটা এক্সচেঞ্জ ব্যবস্থাপনা করতে ব্যবহৃত হয়। তবে এদের মধ্যে উল্লেখযোগ্য কিছু পার্থক্য রয়েছে।


১. ArrayBlockingQueue

  1. সারাংশ:
    • এটি একটি নির্দিষ্ট আকারের fixed-size array ব্যবহার করে তৈরি করা হয়।
    • FIFO (First In, First Out) পদ্ধতি অনুসরণ করে।
    • এর আকার আগে থেকে নির্ধারিত হতে হয় এবং এটি পরে পরিবর্তন করা যায় না।
  2. সিঙ্ক্রোনাইজেশন:
    • পুরো queue একটি single lock দ্বারা সিঙ্ক্রোনাইজ হয়।
    • একই সময়ে শুধু একটি থ্রেড queue এর সাথে কাজ করতে পারে।
  3. পারফরম্যান্স:
    • একাধিক প্রোডিউসার এবং কনজিউমার থাকলে এটি তুলনামূলক ধীর হতে পারে, কারণ একসাথে কাজ করার অনুমতি নেই।
  4. ব্যবহার:
    • সীমিত মেমোরি বা নির্দিষ্ট আকারের queue প্রয়োজন হলে।
  5. কোড উদাহরণ:

    import java.util.concurrent.ArrayBlockingQueue;
    
    public class ArrayBlockingQueueExample {
        public static void main(String[] args) throws InterruptedException {
            ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<>(3);
    
            queue.put(1);
            queue.put(2);
            queue.put(3);
    
            System.out.println(queue.take()); // 1
            System.out.println(queue.take()); // 2
        }
    }
    

২. LinkedBlockingQueue

  1. সারাংশ:
    • এটি একটি লিঙ্কড লিস্ট ভিত্তিক queue যা linked nodes ব্যবহার করে।
    • এর আকার সীমিত বা অসীম (default) হতে পারে।
    • FIFO পদ্ধতি অনুসরণ করে।
  2. সিঙ্ক্রোনাইজেশন:
    • প্রোডিউসার এবং কনজিউমারদের জন্য দুটি separate locks ব্যবহার করে।
    • এটি একাধিক থ্রেডকে একই সময়ে কাজ করার অনুমতি দেয় (একটি ডেটা যোগ করছে, অন্যটি সরাচ্ছে)।
  3. পারফরম্যান্স:
    • তুলনামূলকভাবে ভালো পারফরম্যান্স দেয়, বিশেষ করে একাধিক প্রোডিউসার এবং কনজিউমার থাকলে।
  4. ব্যবহার:
    • যদি queue এর আকার সীমাহীন হওয়ার প্রয়োজন হয় অথবা একাধিক প্রোডিউসার এবং কনজিউমার একসাথে কাজ করবে।
  5. কোড উদাহরণ:

    import java.util.concurrent.LinkedBlockingQueue;
    
    public class LinkedBlockingQueueExample {
        public static void main(String[] args) throws InterruptedException {
            LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>();
    
            queue.put(1);
            queue.put(2);
            queue.put(3);
    
            System.out.println(queue.take()); // 1
            System.out.println(queue.take()); // 2
        }
    }
    

তুলনামূলক পার্থক্য টেবিল

বৈশিষ্ট্যArrayBlockingQueueLinkedBlockingQueue
স্টোরেজ ডেটা স্ট্রাকচারArray (ফিক্সড আকার)Linked List (লিঙ্কড নোড)
ডিফল্ট আকারপ্রয়োজনীয়অসীম (Integer.MAX_VALUE)
সিঙ্ক্রোনাইজেশন লকSingle LockSeparate Locks for Producer & Consumer
পারফরম্যান্সতুলনামূলক ধীরতুলনামূলক দ্রুত
মেমোরি ব্যবস্থাপনাপূর্বনির্ধারিত (Fixed Size)ডায়নামিক (Dynamic Allocation)
উপযুক্ত ক্ষেত্রেসীমিত queue প্রয়োজন হলেঅনেক প্রোডিউসার এবং কনজিউমার থাকলে

বুঝতে হবে:

  • ArrayBlockingQueue যখন queue-এর আকার আগে থেকেই জানা থাকে এবং মেমোরি স্থিতিশীল রাখতে হয়, তখন ব্যবহৃত হয়।
  • LinkedBlockingQueue যেখানে queue-এর আকার ডায়নামিক হতে পারে এবং একাধিক প্রোডিউসার/কনজিউমার সমান্তরাল কাজ করবে, সেখানে ব্যবহৃত হয়।

উদাহরণ:

  • ArrayBlockingQueue: সীমিত ক্যাশে বা ব্যান্ডউইথ ব্যবহার করার জন্য।
  • LinkedBlockingQueue: লগ মেসেজ প্রসেসিং বা বড় ডেটা স্ট্রিমিং এর জন্য।

এটি ব্যবহারকারীর নির্দিষ্ট প্রয়োজনীয়তা অনুযায়ী নির্বাচন করা উচিত।

Content added By
Promotion

Are you sure to start over?

Loading...