2016-10-05 9 views
6

मेरे पास एक धागा है जो डेटा को कतार में धक्का देता है और एक अन्य थ्रेड जो कतार से डेटा पढ़ता है और इसे संसाधित करता है। मैं जांचना चाहता हूं कि संसाधित होने से पहले डेटा कितनी देर तक कतार में बैठता है।नैनोटाइम धागे में काम कर सकते हैं

मैंने पहले थ्रेड द्वारा धक्का देने से पहले डेटा में एक समय पैरामीटर (System.nanoTime() का उपयोग करके गणना की) जोड़ा। एक बार जब दूसरा थ्रेड इसे संसाधित करता है, तो यह System.nanoTime() की गणना करेगा और डेटा में पिछले समय सेट से अंतर प्राप्त करेगा।

क्या यह ठीक से काम करेगा? मैं यह पूछ रहा हूं क्योंकि मुझे लॉग में नकारात्मक अंतर दिखाई दे रहा है।

अद्यतन

मुझे लगता है कि स्पष्ट करना चाहते हैं, शुरू करने का समय एक अलग मशीन में एक प्रक्रिया के द्वारा रखा जाता है और अंतर एक अलग मशीन में गणना की जाती है।

+0

एक मशीन पर स्थित कतार है? क्या आप इसके बजाय कतार में समय माप नहीं सकते? – nandsito

+0

कतार रेडिस में है। हम कतार में समय कैसे माप सकते हैं? – cppcoder

उत्तर

3

मैंने थ्रेड और प्रक्रियाओं के बीच System.nanoTime() का उपयोग किया है। एक मशीन पर यह वैश्विक और एकात्मक रूप से बढ़ रहा है (बहु-सॉकेट विंडोज एक्सपी के अपवाद के साथ)

यदि आपको नकारात्मक अंतर दिखाई देता है, तो संभव है कि यह आपके कोड में एक बग है।

आप मशीनों के बीच नैनोटाइम() देख सकते हैं, लेकिन आपको घड़ियों के बीच अंतर और बहाव के लिए समायोजन करना होगा। (और तुम बड़े बहुत ही नकारात्मक परिणाम प्राप्त कर सकते है अगर आप इस सुधार नहीं करते हैं)

शुरू करने का समय एक अलग मशीन में एक प्रक्रिया के द्वारा रखा जाता है और अंतर एक अलग मशीन में गणना की जाती है।

मशीनों के बीच आप की जरूरत करने के लिए या तो

  • उपयोग System.currentTimjeMillis() जो आम तौर पर एनटीपी के साथ एक मिली-दूसरे के लिए सटीक है।
  • एक राउंड ट्रिप के लिए System.nanoTime() का उपयोग करें, यानी ए ro बी से एक संदेश भेजें और दूसरी ओर ए को भेजें। आधा दौर यात्रा का समय इस से अनुमान लगाया जा सकता है।
  • सिस्टम का उपयोग करें। नैनोटाइम() विलुप्त होने के समय के लिए नहीं, बल्कि जिटर का पता लगाने के लिए। यह मानता है कि अधिकांश समय देरी स्वीकार्य है (10 - 100 माइक्रो-सेकंड कहें) लेकिन कभी-कभी यह सामान्य से काफी अधिक है। मैं जिटर का पता लगाने में मदद के लिए इस वर्ग का उपयोग करता हूं। RunningMinimum

आप केवल बहु मिली-सेकंड देरी मैं currentTimeMillis का प्रयोग करेंगे में रुचि रखते हैं()

+0

मुझे लगता है कि यह वही है जो मुझे सामना कर रहा है। क्या आप कृपया मशीनों में अंतर को समायोजित करने के बारे में बता सकते हैं? – cppcoder

+0

मुझे नहीं लगता कि मशीनों में 'नैनोटाइम' काम करने की कोशिश करने में कोई बात नहीं है और यहां तक ​​कि प्रक्रियाओं के बीच भी यह केवल दुर्घटना द्वारा काम करता है (काम करने की आवश्यकता नहीं है)। –

+0

मशीनों में बीत चुके समय को खोजने के लिए कोई अन्य तंत्र है? – cppcoder

संबंधित मुद्दे