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