2012-12-19 47 views
6

की गति/प्रदर्शन विशेषताएं सामान्य रूप से ब्लॉकिंग और गैर-अवरुद्ध विंसॉक टीसीपी सॉकेट में गति या प्रदर्शन अंतर है? मैं दोनों सॉकेट के अंतर प्राप्त कर सकता हूं लेकिन दो प्रकार के बीच विस्तृत प्रदर्शन तुलना नहीं है।ब्लॉकिंग बनाम गैर-अवरुद्ध विंसॉक

+0

यदि कुछ भी है, तो मैं इस प्रश्न को सी ++ के रूप में टैग नहीं करूंगा। –

उत्तर

7

क्योंकि यह गति के बारे में नहीं है। ऑपरेशंस write और read सिर्फ मेमोरी प्रतिलिपि छिपाने में हैं। वे सभी क्रमशः कर्नेल से डेटा कॉपी करते हैं। अर्थात। वे वास्तव में कुछ भी भेज या प्राप्त नहीं करते हैं।

अवरुद्ध बनाम nonblocking सुविधा पूछते हैं: जब तक पूरा ब्लॉक आप इन आपरेशनों पसंद करते हैं करने के लिए या वापस जाने के लिए -1 और मामले में EAGAIN वे तुरंत नहीं किया जा सकता? उदाहरण के लिए, आप सॉकेट से पढ़ते हैं लेकिन प्राप्त बफर में कुछ भी नहीं है। क्या आप recv लटकाना पसंद करते हैं जब तक कि कुछ आता है या वापस लौटने के लिए -1 EAGAIN?

+0

ज्ञान के लिए धन्यवाद। –

+0

यह आईओसीपी के साथ काफी छद्म है, जहां उपयोगकर्ता बफर पॉइंटर सरणी को कर्नेल में WSASend/WSARecv कॉल के साथ संवाद किया जाता है। अभी भी कुछ डेटा आंदोलन है, लेकिन मुझे लगता है कि एनआईसी हार्डवेयर बफर सीधे उपयोगकर्ता स्पेस बफर में डीएमए किया जा सकता है - एक स्तर की दुखी प्रतिलिपि में कटौती करता है। –

6

मेरे अनुभव में गैर-अवरुद्ध विंसॉक ऑपरेशन थोड़ा धीमा है लेकिन अधिक स्केलेबल है। तथ्य यह है कि यदि आप ब्लॉकिंग I/O का उपयोग करते हैं तो आपको दो सिस्टम कॉल और एप्लिकेशन स्तर पर कुछ प्रेषण करने की आवश्यकता होती है जब आप गैर-अवरुद्ध I/O (आईओसीपी के साथ) और एक सिस्टम कॉल करते हैं। यदि आपके पास कई समवर्ती कनेक्शन हैं, तो I/O को अवरुद्ध करना अधिक स्केलेबल आर्किटेक्चर की वजह से बहुत तेज़ है।

यदि आपको अधिकतम बैंडविड्थ के साथ बिंदु से बिंदु स्थानांतरित करने की आवश्यकता है - ब्लॉकिंग I/O का उपयोग करें। यदि आपको कई समवर्ती ग्राहक कनेक्शनों को संभालने की आवश्यकता है - I/O को अनब्लॉक करने का उपयोग करें। उनमें से किसी से भी ज्यादा उम्मीद मत करो।

आम तौर पर यह "ईवेंट-संचालित बनाम थ्रेडेड" सर्वर आर्किटेक्चर के बारे में अधिक है, फिर "अवरुद्ध बनाम अवरोधन"। कोई सार्वभौमिक सर्वर आर्किटेक्चर नहीं है जिसका उपयोग किसी भी स्थिति में किया जा सकता है। यह आवेदन पर निर्भर करता है।