बहुत समय पहले मेरे कार्यक्रम में एक बग था। मूल कारण यह था कि सी फ़ंक्शनक्या टाइमर की नींद की तुलना में बेहतर परिशुद्धता है()
sleep(60);
दुर्लभ मौकों पर 60 सेकंड से कम समय तक सो जाएगा। या फ़ंक्शन ने थ्रेड को 60 से अधिक सोने का कारण बना दिया, लेकिन घड़ी ओएस द्वारा स्वचालित रूप से बदल दी गई थी (ऐसा लगता है क्योंकि बग केवल XX::00::00
पर हो रहा था), उर्फ यह शायद ही कभी ही प्रकट हो रहा था, और केवल "राउंड घंटे" (नींद shoudl> xh0m0s पर समाप्त हो गया है, यह x-1h59m59.99*s
पर समाप्त हुआ)।
फिर मेरा प्रोजेक्ट मैनेजर एक रान पर चला गया कि उसने लाखों बार कहा कि हमें केवल टाइमर का उपयोग करना चाहिए, सोना नहीं चाहिए। उस समय से मैंने इस धारणा को स्वीकार किया कि टाइमर नींद() से अधिक सटीक हैं, लेकिन अब मुझे लगता है कि मुझे कुछ और आधिकारिक स्रोत मांगना चाहिए। तो:
- टाइमर नींद से अधिक सटीक हैं?
- (संबंधित) क्या वे अलग-अलग तरीकों का उपयोग करके लागू किए गए हैं (ओएस स्तर पर)?
मुझे पता है टाइमर का उपयोग कॉलबैक करने के लिए किया जाता है, नींद में वर्तमान धागे के निष्पादन में देरी होती है, मैं कार्यान्वयन के देरी निष्पादन हिस्से के बारे में बात करता हूं।
बीटीडब्ल्यू ओएस लिनक्स था, लेकिन यदि संभव हो तो मुझे सामान्य उत्तर की परवाह है।
किसी भी मामले में, टाइमर/नींद ऑपरेशन को दी गई अवधि के लिए वास्तव में रोकने की अपेक्षा करना एक अच्छा विचार नहीं है। ओएस आपके अनुरोध को सम्मानित करने के लिए कर सकता है, लेकिन कभी-कभी यह असफल हो जाएगा। इसके लिए तैयार रहें। – TheZ
मुझे पता है कि अब, बग "फिक्स" (मैनेजर के बाद अपने टाइमर रेंट से शांत हो गया) कुछ सुरक्षा देरी जोड़ने के लिए था। – NoSenseEtAl
ऐसा लगता है कि एक गहरी वास्तुशिल्प मुद्दा है यदि नींद में +/- 1 दूसरा अंतर सब कुछ तोड़ने का कारण बनता है ... – Rook