एक क्यू एक प्रतीक्षा सूची की तरह है।
कल्पना करें कि आप नवीनतम एप्पल उत्पाद खरीदने, मूवी टिकट प्राप्त करने, या अपने किराने का भुगतान करने के लिए लाइन में इंतजार कर रहे हैं।
ये क्यू हैं!
आप अपने रूबी प्रोजेक्ट्स में क्यू का उपयोग कर सकते हैं।
कैसे?
क्यू आपको आगमन के क्रम में चीजों को प्रोसेस करने की अनुमति देते हैं, इसलिए वे किसी भी चीज़ के लिए उपयोगी हो सकते हैं जिसके लिए प्रतीक्षा करने के समय के आधार पर प्राथमिकता देने की आवश्यकता होती है।
आप इसे लागू कर सकते हैं:
- एक वास्तविक-विश्व क्यू मॉडल करें
- ब्रेडथ-फर्स्ट सर्च (BFS) जैसे एल्गोरिदम लागू करें
- साझा संसाधन तक पहुंच को नियंत्रित करें, जैसे CPU, डिस्क, प्रिंटर, आदि।
अब...
आइए कुछ कोड देखें!
रूबी में क्यू कैसे कार्यान्वित करें
एक सरणी Queue की तरह व्यवहार कर सकती है यदि आप सही मेथड्स का उपयोग करते हैं।
ये मेथड्स हैं:
unshift(या रूबी 2.5+ के साथ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 क्लास का उपयोग करके।
पढ़ने के लिए धन्यवाद। 🙂