टीसीपी लूपबैक कनेक्शन बनाम यूनिक्स डोमेन सॉकेट प्रदर्शन


116

एंड्रॉइड और आईओएस आधारित एप्लिकेशन पर काम करना जिसमें उसी डिवाइस में चल रहे सर्वर के साथ संचार की आवश्यकता होती है। वर्तमान में ऐप और सर्वर के साथ संचार करने के लिए टीसीपी लूपबैक कनेक्शन का उपयोग करना (ऐप उपयोगकर्ता परत में लिखा गया है, सर्वर सर्वर में लिखा गया है जो Android NDK का उपयोग करके C ++ में लिखा गया है)

मैं सोच रहा था कि यूनिक्स डोमेन सॉकेट के साथ अंतर संचार की जगह प्रदर्शन में सुधार होगा?

या सामान्य तौर पर कोई सबूत / सिद्धांत है जो यह साबित करता है कि यूनिक्स डोमेन सॉकेट बेहतर प्रदर्शन देगा तो टीसीपी लूपबैक कनेक्शन?


3
याद रखें कि लोकल सॉकेट्स (UNIX डोमेन सॉकेट्स) को फाइल सिस्टम में फाइल की जरूरत होती है। टीसीपी लूपबैक पते का उपयोग यह सब स्मृति में रखता है। और अगर आपको दूरस्थ टीसीपी सॉकेट्स का उपयोग करना है, तो नए सॉकेट और पते वाले परिवार के साथ फ़िडलिंग के बजाय दूसरे टीसीपी सॉकेट को एकीकृत करना आसान हो सकता है।
कुछ प्रोग्रामर ने

1
@JoachimPileborg जब केवल लिनक्स (Android) के लिए विकसित किया जा रहा है, तो सार UNIX डोमेन सॉकेट ऐड्रेस का उपयोग करने का विकल्प है , जिसे फाइल सिस्टम में फाइल की आवश्यकता नहीं है।
थुविला

Android कनेक्शन के लिए stackoverflow.com/questions/14643571/… देखें ।
RDX

8
@Someprogrammerdude उन्हें फ़ाइल सिस्टम में एक फ़ाइल की आवश्यकता होती है, लेकिन इसका मतलब यह नहीं है कि सब कुछ डिस्क और बैक पर जाता है।
लोरने का

3
@Someprogrammerdude केवल फ़ाइल नाम, स्वामित्व और अनुमतियाँ जानकारी कभी भी फ़ाइल सिस्टम में संग्रहीत हो जाती है। सभी वास्तविक डेटा ट्रांसफर पूरी तरह से मेमोरी में होते हैं।
जेसिन

जवाबों:


105

हां, यूनिक्स डोमेन सॉकेट्स द्वारा स्थानीय इंटरप्रोसेस संचार लूपबैक लोकलहोस्ट कनेक्शन द्वारा संचार से तेज होना चाहिए क्योंकि आपके पास टीसीपी ओवरहेड कम है, यहां देखें ।


12
पहला लिंक दूसरी कड़ी का हवाला दे रहा है, जो 2005 (पुरानी) से है। और यह केवल
Janus Troelsen

7
यह उत्तर गलत है, जब आधुनिक लिनक्स पर लूपबैक टीसीपी का परीक्षण उतने ही तेज और कभी-कभी यूडीएस से तेज होता है। यदि आवश्यक बेंचमार्क प्रदान कर सकते हैं
easytiger

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

4
स्थानीय यूडीपी के बारे में क्या?
CMCDragonkai

2
यह देखते हुए कि पहला लिंक मृत है (HTTP 404) ... यही कारण है कि स्टैकओवरफ़्लो सबसे अच्छा अभ्यास कम से कम उत्तर लेखन के समय स्रोत URL से एक संक्षिप्त / संक्षिप्त प्रासंगिक उद्धरण प्रदान करना है (तब जब लिंक नीचे जाता है संक्षिप्त सारांश अभी भी उपलब्ध है)।
ट्रेवर बॉयड स्मिथ

80

यह मानदंड: https://github.com/rigtorp/ipc-bench टीसीपी सॉकेट्स, यूनिक्स डोमेन सॉकेट्स (यूडीएस), और पीआईपीई के लिए विलंबता और थ्रूपुट परीक्षण प्रदान करता है।

Here you have the results on a single CPU 3.3GHz Linux machine :

TCP average latency: 6 us

UDS average latency: 2 us

PIPE average latency: 2 us

TCP average throughput: 0.253702 million msg/s

UDS average throughput: 1.733874 million msg/s

PIPE average throughput: 1.682796 million msg/s

66% विलंबता में कमी और लगभग 7X अधिक थ्रूपुट बताते हैं कि अधिकांश प्रदर्शन-महत्वपूर्ण सॉफ़्टवेयर का अपना IPC कस्टम प्रोटोकॉल क्यों है।


7
मुझे लगता है जैसे उनके उत्पाद समस्या का जवाब है! शायद इसलिए वे उन सवालों का जवाब दे रहे हैं; क्योंकि वे एक उत्तर जानते हैं।
3

यह एक शानदार जवाब है क्योंकि इसमें कुछ नंबर हैं। टीसीपी से यूनिक्स तक का थ्रूपुट 350% बेहतर है, आई 5 पर यूआईआईपी पीआईपीई 40% है।
स्कालाविलायम

13
@GreenR सस्ता उत्तर वास्तव में प्रासंगिक है, लेकिन लाइन हमारे टोरसवेयर स्पीडस उत्पाद ... 2 संस्करणों के साथ आती है, स्पीडस लाइट और स्पीडस एक्सट्रीम परफॉर्मेंस (ईपी) नहीं है, और यह पूरी चीज को एक सस्ते विज्ञापन की तरह आवाज देती है।
दिमित्री ग्रिगोरीव

3
स्पैम। और नहीं, उसका उत्पाद टीसीपी और यूनिक्स सॉकेट्स के बीच तुलना में प्रासंगिक नहीं है। सॉकेट्स के लिए सामान्य ज्ञान विकल्प के बहुत सारे विकल्प हैं- प्रत्येक बाहर जो ओपी पूछ रहा है
JSON

उस टूल के उपयोग के बारे में पर्याप्त रूप से नहीं बताया गया है। क्या क्लाइंट और सर्वर को कॉल करने का तरीका किसी तरह समझा रहा है?
falkb

40

रेडिस बेंचमार्क दिखाता है कि यूनिक्स डोमेन सॉकेट टीसीपी लूपबैक से अधिक तेज हो सकता है।

जब सर्वर और क्लाइंट बेंचमार्क प्रोग्राम एक ही बॉक्स पर चलते हैं, तो टीसीपी / आईपी लूपबैक और यूनिक्स डोमेन सॉकेट दोनों का उपयोग किया जा सकता है। प्लेटफ़ॉर्म के आधार पर, यूनिक्स डोमेन सॉकेट टीसीपी / आईपी लूपबैक (उदाहरण के लिए लिनक्स पर) की तुलना में लगभग 50% अधिक थ्रूपुट प्राप्त कर सकता है। रेडिस-बेंचमार्क का डिफ़ॉल्ट व्यवहार टीसीपी / आईपी लूपबैक का उपयोग करना है।

हालाँकि, यह अंतर तभी मायने रखता है जब थ्रूपुट अधिक होता है।

प्रति डेटा आकार थ्रूपुट


8

जब दोनों सहकर्मी एक ही मेजबान पर होते हैं तो यूनिक्स डोमेन सॉकेट टीसीपी सॉकेट के मुकाबले दोगुना होता है। यूनिक्स डोमेन प्रोटोकॉल एक वास्तविक प्रोटोकॉल सूट नहीं है, लेकिन एक ही होस्ट पर क्लाइंट / सर्वर संचार करने का एक तरीका है जो एक ही एपीआई का उपयोग करके क्लाइंट और सर्वर के लिए विभिन्न होस्ट पर उपयोग किया जाता है। यूनिक्स डोमेन प्रोटोकॉल इंटरप्रोसेस संचार (आईपीसी) के तरीकों का एक विकल्प है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.