একটি কিউ হলো একটি ওয়েটিং লিস্ট।
কল্পনা করুন আপনি লেটেস্ট অ্যাপল পণ্য কেনার জন্য, সিনেমার টিকেটের জন্য, বা গ্রোসারি বিল দেয়ার জন্য লাইন দাঁড় করছেন।
এগুলোই কিউ!
আপনি আপনার রুবি প্রজেক্টে কিউ ব্যবহার করতে পারেন।
কীভাবে?
কিউ আপনাকে আগমনের ক্রম অনুযায়ী জিনিসগুলো প্রসেস করতে দেয়, তাই যেসব জিনিস বেশি দেয়ের ধরে অপেক্ষা করছে সেগুলোকে প্রায়োরিটি দিতে এটি সহায়ক।
এটি প্রয়োগ করা যায়:
- রিয়েল-ওয়ার্ল্ড কিউ মডেল করতে
- ব্রেডথ-ফার্স্ট সার্চ (BFS) এর মতো অ্যালগরিদম ইমপ্লিমেন্ট করতে
- শেয়ার্ড রিসোর্সে অ্যাক্সেস কন্ট্রোল করতে, যেমন CPU, ডিস্ক, প্রিন্টার ইত্যাদি
এখন…
কোড দেখি!
রুবিতে কিউ ইমপ্লিমেন্ট করার পদ্ধতি
সঠিক মেথড ব্যবহার করলে একটি অ্যারে Queue এর মতো আচরণ করতে পারে।
এই মেথডগুলো হলো:
unshift(অথবা রুবি ২.৫+ এprepend)pop
আপনি unshift করলে, কিউতে একটি আইটেম যোগ করেন।
উদাহরণ:
queue = [] queue.unshift "apple" queue.unshift "orange" queue.unshift "banana" # ["banana", "orange", "apple"]
আপনি pop করলে, কিউর থেকে লাস্ট আইটেমটি রিমুভ হয়।
এটিই পরবর্তী প্রসেস হওয়া উচিত আইটেম।
উদাহরণ:
queue.pop # "apple" queue.pop # "orange"
আপনি লাস্ট আইটেমটি দেখতে পারেন, "কে নেক্সট" জানার জন্য, সেটা রিমুভ না করেই।
উদাহরণ:
queue[-1] # "banana"
এই অপারেশনকে peek বলে।
রুবি কনকারেন্ট কিউ
রুবিতে একটি সঠিক থ্রেড-সেফ, ব্লকিং, Queue ক্লাস রয়েছে।
আপনি এই কিউটি মাল্টি-থ্রেডেড প্রোগ্রামে কাজ কোঅর্ডিনেট করতে ব্যবহার করতে পারেন।
উদাহরণ:
que = Queue.new que << 1 que << 2 que << 3
আপনি এই কিউ থেকে pop দিয়ে আইটেম নিতে পারেন:
que.pop # 1 que.pop # 2
যদি কিউ খালি থাকে, pop কল করলে আপনার বর্তমান থ্রেড স্লিপ করে যাবে এবং কিছু কিউতে যোগ হওয়া পর্যন্ত অপেক্ষা করবে।
এটাই "ব্লক" হওয়ার অর্থ।
আপনি true পাস করে ব্লকিং এড়াতে পারেন pop-এ:
que.pop(true)
এটি কিউ খালি থাকলে ThreadError: queue empty এক্সেপশন থ্রো করবে।
সাইজড কিউ ব্যবহার করার পদ্ধতি
একটি সাইজড কিউ সাধারণ কিউর মতোই কিন্তু একটি সাইজ লিমিট থাকে।
উদাহরণ:
que = SizedQueue.new(5)
যখন কিউ ফুল থাকে, push (যা << এর সমান) অপারেশন বর্তমান থ্রেডকে সাসপেন্ড করবে যতক্ষণ না কিউ থেকে একটি আইটেম নেওয়া হয়।
উদাহরণ:
que.push(:bacon)
আপনি এক্সেপশন থ্রো করতে পারেন true আর্গুমেন্ট হিসেবে পাস করে:
que.push(:bacon, true)
এটি ThreadError: queue full রেইজ করবে।
ভিডিও টিউটোরিয়াল
সারসংক্ষেপ
আপনি রুবি কিউ সম্পর্কে শিখলেন!
আপনি কিউ ব্যবহার করতে পারেন যখন আপনাকে কাজ প্রসেস করতে হয় FIFO (ফার্স্ট-ইন-ফার্স্ট-আউট) অর্ডার এ। কিউ ইমপ্লিমেন্ট করার দুটি পদ্ধতি রয়েছে, অ্যারে ব্যবহার করে, অথবা Queue ক্লাস ব্যবহার করে।
পড়ার জন্য ধন্যবাদ। 🙂