poll
और select
कॉल (एक टिप्पणी में बेसिल स्टैरेनकेविच द्वारा उल्लिखित) या एक सेमफोर (उत्तर में एलएस द्वारा उल्लिखित) परिस्थितियों के आधार पर अनुरोधों की प्रतीक्षा करने के सही तरीके हैं। poll
या select
के बिना ऑपरेटिंग सिस्टम पर, कुछ समान होना चाहिए।
न तो sleep
, YieldProcessor
, न ही sched_yield
निम्नलिखित कारणों से ऐसा करने के उचित तरीके हैं।
YieldProcessor
और sched_yield
केवल प्रक्रिया को चलने योग्य कतार के अंत तक ले जाएं लेकिन इसे चलाने योग्य छोड़ दें। प्रभाव यह है कि वे अन्य प्रक्रियाओं को निष्पादित करने के लिए समान या उच्च प्राथमिकता पर अनुमति देते हैं, लेकिन, जब उन प्रक्रियाओं को पूरा किया जाता है (या यदि कोई नहीं है), तो YieldProcessor
या sched_yield
नामक प्रक्रिया चलती रहती है। यह दो समस्याओं का कारण बनता है। एक यह है कि कम प्राथमिकता प्रक्रिया अभी भी नहीं चलेगी। दूसरा यह है कि यह प्रोसेसर को ऊर्जा का उपयोग करके हमेशा चल रहा है। हम ऑपरेटिंग सिस्टम को पहचानने के लिए पसंद करेंगे जब किसी प्रक्रिया को चलाने की आवश्यकता नहीं होती है और प्रोसेसर को कम-शक्ति स्थिति में डाल दिया जाता है।
sleep
इस निम्न-शक्ति स्थिति की अनुमति दे सकता है, लेकिन यह अनुमान लगाने वाला गेम खेलता है कि अगला अनुरोध आने तक कितना समय लगेगा, जब आवश्यकता नहीं होती है तो प्रोसेसर बार-बार जागता है, और यह प्रक्रिया को कम प्रतिक्रियाशील बनाता है अनुरोध करने के लिए, क्योंकि अनुरोधित समय की समाप्ति तक प्रक्रिया जारी रहेगी, भले ही सेवा करने का अनुरोध हो।
poll
और select
कॉल बिल्कुल इस स्थिति के लिए डिज़ाइन किए गए हैं। वे ऑपरेटिंग सिस्टम को बताते हैं कि यह प्रक्रिया अपने आई/ओ चैनलों में से किसी एक पर आने वाले अनुरोध की सेवा करना चाहती है लेकिन अन्यथा ऐसा करने का कोई काम नहीं है। यह ऑपरेटिंग सिस्टम को प्रक्रिया को चिह्नित करने की अनुमति देता है और उपयुक्त होने पर प्रोसेसर को कम-शक्ति स्थिति में रखने की अनुमति देता है।
एक सेमाफोर का प्रयोग छोड़कर संकेत प्रक्रिया को जगाने के लिए एक आई/ओ चैनल में उत्पन्न होने वाली गतिविधि के बजाय सेमाफोर को ऊपर उठाने के किसी अन्य प्रक्रिया से आता है कि, एक ही व्यवहार करती है। Semaphores उपयुक्त हैं जब कुछ काम करने के संकेत इस तरह से आता है; बस poll
का उपयोग करें या एक सेमफोर आपकी स्थिति के लिए अधिक उपयुक्त है।
आलोचना poll
, select
, या एक सेमफोर का कारण कर्नेल-मोड कॉल अप्रासंगिक है, क्योंकि अन्य विधियां कर्नेल-मोड कॉल भी करती हैं। एक प्रक्रिया अपने आप नहीं सो सकती है; इसे ऑपरेटिंग सिस्टम को अनुरोध करने के लिए इसे कॉल करना होगा। इसी प्रकार, YieldProcessor
और sched_yield
ऑपरेटिंग सिस्टम के लिए अनुरोध करते हैं।
स्रोत
2012-12-03 14:34:12
स्लीपिंग शेड्यूलर को आपकी प्रक्रिया के बजाय सीपीयू पर कुछ अन्य प्रक्रिया चलाने के लिए शेड्यूलर बताती है (यह भी सरल रखें)। सोते समय आपका प्रोग्राम किसी भी CPU संसाधन का उपभोग नहीं करेगा। यहां तक कि कुछ मिलीसेकंड के लिए भी सोते हुए चीजें एक अंतहीन पाश में चिकनी बनाती हैं जैसे आपने इसे दिखाया है। –
यदि आप * सुन रहे हैं * तो आपको कुछ मल्टीप्लेक्सिंग सिस्कल जैसे 'पोल (2) '(या पुराने, लगभग अप्रचलित,' चयन (2)') –