एक व्यस्त प्रतीक्षा प्रणाली कॉल का चयन करें ()? - लिनक्स, आईओ, व्यस्त प्रतीक्षा

int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

सवाल:

के बावजूद timeout तर्क पारित किया गया,

कर देता है select() सीपीयू चक्र पर कब्जा करें, जब तक कोई फ़ाइल डिस्क्रिप्टर तैयार न हो जाए?

उत्तर:

जवाब के लिए 2 № 1

यह नहीं होना चाहिए; कोई सभ्य ओएस (लिनक्स सहित,विंडोज़ और अधिक) यदि कोई एफडी तुरंत उपलब्ध नहीं है तो प्रक्रिया को निलंबित कर देगा। उस घटित होने के बीच सीपीयू चक्र और अगले एफडी उपलब्ध होने पर सिस्टम में अन्य धागे / प्रक्रियाओं, और / या सिस्टम निष्क्रिय लूप द्वारा उपयोग के लिए उपलब्ध हैं। आम तौर पर, ओएस को एक ईवेंट संचालित प्रणाली के रूप में व्यवस्थित किया जाता है, इसलिए चयन में बदलावों की बार-बार जांच करने की आवश्यकता नहीं होती है: (उदाहरण के लिए डेटा पढ़ने के लिए उपलब्ध) का परिणाम परिणामस्वरूप सभी सक्रिय चयनों को साइड- प्रभाव।

हालांकि, ध्यान रखें कि वास्तविक कार्यान्वयन के लिए आमतौर पर चयन () आमतौर पर सी-लाइब्रेरी रैपर फ़ंक्शन होता है।

ध्यान रखें कि आपको सभी बकाया को साफ़ करना होगाप्रत्येक सफल रिटर्न पर उपलब्ध एफडी, क्योंकि यदि आप बिना किसी कारण के सिस्टम सिस्टम ओवरहेड करने जा रहे हैं, और अतिरिक्त रूप से "भुखमरी" का जोखिम उठाते हैं।

व्यस्त-प्रतीक्षा व्यवहार क्या हो सकता हैपास-शून्य मान के लिए टाइमआउट और फिर लूपिंग। मैंने इसे कुछ मामलों में देखा है क्योंकि प्रोग्रामर ने सोचा था कि उन्हें किसी एफडी के रूप में दिखाई देने वाली चीज़ की जांच करने की आवश्यकता नहीं है


संबंधित सवाल
सबसे लोकप्रिय