2011-12-02 24 views
5

के साथ मापने के लिए मैं http अनुरोध भेजने के लिए node.js का उपयोग करता हूं। मुझे यह मापने की आवश्यकता है कि यह कितना समय लगा।http अनुरोध समय को node.js

start = getTime() 
http.send(function(data) {end=getTime()}) 

अगर मैं http प्रतिक्रिया कॉलबैक अंदर getTime फोन, वहाँ जोखिम है कि मेरी कॉलबैक तुरंत बुलाया जा रहा है नहीं है जब प्रतिक्रिया कतार में अन्य घटनाओं के कारण वापस cames है। अगर मैं इस काम के लिए नियमित जावा या सी # सिंक्रोनस कोड का उपयोग करता हूं, तो ऐसा जोखिम भी मौजूद है, क्योंकि शायद एक और धागा मेरे सामने ध्यान दे।

start = getTime() 
http.send() 
end=getTime() 

कैसे Node.js करता अन्य (तुल्यकालिक) मंच के लिए तुलना - यह एक अच्छा उपाय बेहतर या बदतर के लिए अपने मौका है?

+0

आप निम्न स्तर (सी ++) हुक के बिना सीधे घटना लूप – Raynos

+0

में ऐसा नहीं कर सकते हैं क्या आपका मतलब है कि मुझे अपने द्वारा http मॉड्यूल को लागू करने की आवश्यकता है या क्या मैं कुछ विस्तारशीलता तंत्र का उपयोग कर सकता हूं? –

+4

मेरा मतलब है कि आप कच्चे टीसीपी पैकेट वापस आते समय _exactly_ जानना चाहते हैं। ऐसा करने का कोई तरीका नहीं है, फिर अपने http हैंडलर को कॉल करने का इंतजार करें। दोनों के बीच विलंबता की केवल थोड़ी सी मात्रा है (नेटवर्क यातायात समय की तुलना में एक महत्वहीन राशि)। – Raynos

उत्तर

1

ग्रेट अवलोकन!

थ्योरी:

  1. अन्य घटनाओं घटना पाश में जो साथ आग के लिए तैयार हैं:

    आप सूक्ष्म बेंच मार्किंग प्रदर्शन कर रहे हैं, वहाँ जो संभवतः माप तिरछा कर सकते हैं विचारों की एक संख्या मौजूद है http में प्रश्न भेजें, और भेजने से पहले अनुक्रमिक रूप से निष्पादित हो जाएं - नोड विशिष्ट।

  2. थ्रेड/प्रोसेस स्विचिंग जो प्रेषण ऑपरेशन की अवधि के भीतर किसी भी समय हो सकती है - जेनेरिक।

  3. सीमित मात्रा में होने वाले कर्नेल के I/O बफर मनमाने ढंग से देरी का कारण बनता है - ओएस/वर्कलोड/सिस्टम लोड विशिष्ट।

  4. सिस्टम समय - भाषा/रनटाइम विशिष्ट एकत्र करने में लापरवाही हुई।

  5. डेटा का चंकिंग/बफरिंग: सॉकेट [http कार्यान्वयन] विशिष्ट।

अभ्यास:

नोए से (1), के जावा/सी # एक समर्पित धागा इस मुद्दे की जरूरत नहीं है, जबकि भुगतना पड़ता है। लेकिन जैसे ही नोड एक गैर-अवरुद्ध I/O मॉडल संचालित एक घटना लागू करता है, अन्य घटनाएं अवरोध प्रभाव का कारण नहीं बनती हैं, बल्कि ईवेंट कतार में रखी जाएंगी। केवल जो लोग तैयार हैं, उन्हें निकाल दिया जाएगा, और उनके कारण हुई विलंबता यह होगी कि उन्हें कितना I/O काम करना है, और उनके संबंधित कॉलबैक में किए गए किसी भी CPU बाध्य क्रियाएं। ये, व्यावहारिक रूप से, वस्तुओं (2) से (5) के अधिक दृश्य प्रभावों के कारण, तुलना में नगण्य और बाहर निकल जाएंगे। इसके अलावा, आमतौर पर लिखने वाले गैर-अवरुद्ध होते हैं, जिसका अर्थ है कि वे अगले लूप पुनरावृत्ति के लिए इंतजार किए बिना किए जाएंगे। और आखिरकार, जब लेखन किया जाता है, तो कॉलबैक ऑनलाइन जारी किया जाता है और अनुक्रमिक रूप से, बीच में किसी अन्य घटना के लिए कोई उपज नहीं होती है।

संक्षेप में, यदि आप एक समर्पित जावा थ्रेड को नोड कोड के साथ अवरुद्ध करने वाले I/O को तुलना करते हैं, तो आप जावा माप अच्छे देखेंगे, लेकिन बड़े पैमाने पर अनुप्रयोगों में, थ्रेड संदर्भ स्विचिंग प्रयास इस लाभ को ऑफ़सेट करेगा, और नोड प्रदर्शन खड़ा होगा।

उम्मीद है कि इससे मदद मिलती है।

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