टीएल; डीआर यदि आप एक घटना के लिए मतदान कर रहे हैं जो एक मिनट में होता है, तो आप हर नैनो दूसरे की जांच नहीं कर सकते हैं।
हां, यह वास्तव में सच है। धागे में सोना उस थ्रेड के सीपीयू उपयोग को कम करता है। जबकि एक धागा सोता है, यह शायद ही कभी किसी भी CPU समय का उपभोग करता है।
हां, यह काफी हद तक किसी भी भाषा के लिए सच है जब तक ओएस देशी थ्रेडिंग एपीआई का उपयोग करके नींद लागू की जाती है।
इस बारे में सहज लगता है करने के लिए, हमें जुड़ा हुआ सवाल से कार्यक्रम का एक सरलीकृत संस्करण पर विचार करते हैं: अब
while end_condition_expression:
if time_based_condition_expression:
do_something()
, हमें दुनिया को आसान बनाने, और लगता है कि कार्यक्रम केवल प्रक्रिया पर चल रहा है प्रोसेसर
आइए हम यह भी मान लें कि समय आधारित स्थिति एक मिनट में सच है। आइए यह भी मान लें कि end_condition_expression
और time_based_condition_expression
निष्पादित करने से cpu समय के 10 नैनो सेकंड खर्च होते हैं।
यह एक मिनट के भीतर कितना सीपीयू समय उपभोग करेगा? बिल्कुल एक मिनट == 60 000 000 000 नैनो सेकंड। पूरे समय के दौरान सीपीयू उपयोग 100% होगा। लूप छह अरब बार फिर से शुरू होगा।
while end_condition_expression:
if time_based_condition_expression:
do_something()
sleep_for_a_second()
कितनी बार पाश एक मिनट के भीतर क्रियान्वित होगा:
अब, कार्यक्रम के इस बदलाव पर विचार? 60 पुनरावृत्तियों। यह एक मिनट के भीतर कितना सीपीयू का उपभोग करेगा? 60 * 10 एनएस = 600 एनएस। कार्यक्रम का गैर-नींद संस्करण क्या है इसका एक सौ मिलियनवां हिस्सा है।
असल में, कॉल से सोने के लिए थोड़ा अधिक ओवरहेड होता है, और सीपीयू समय अन्य प्रक्रियाओं के साथ साझा किया जाता है, और एक शेड्यूलर शामिल होता है, और सटीक सीपीयू उपयोग मेरी धारणाओं से बिल्कुल मेल नहीं खाएगा, लेकिन विचार वही रहता है।
लूप में नींद जोड़ना आम तौर पर प्रोग्राम तर्क के साथ एक समस्या है लेकिन हाँ यह खराब कोड में मदद करता है। – NathanOliver
क्या होगा यदि आप एक प्रोग्राम को हमेशा के लिए चलाना चाहते हैं, जबकि यह किसी बाधा की प्रतीक्षा करता है? क्या कोई बेहतर विकल्प है? – dashiell
यदि कुछ बाहरी घटना के लिए प्रतीक्षा करने के लिए थोड़ी देर लूप है, तो इसे ईवेंट के इंतजार के लिए डिज़ाइन किए गए किसी प्रकार के मल्टीथ्रेड टूल द्वारा प्रतिस्थापित करने की आवश्यकता है। यदि यह फ़ाइल के लिए डिस्क को मतदान कर रहा है, तो सो जाओ तो चेक शायद सबसे अच्छा विकल्प है। लेकिन वास्तविक सीपीयू निर्देशों के माध्यम से बस जल रहा है जैसे कि (सत्य) घटना की प्रतीक्षा करने का सबसे खराब तरीका है। क्या कोई बेहतर तरीका है ... इस बात पर निर्भर करता है कि आप किस घटना की प्रतीक्षा कर रहे हैं। –