सॉकेट्स बनाम साझा मेमोरी के माध्यम से इंटर प्रक्रिया संचार के पेशेवरों और विपक्ष क्या हैं?


9

मैं समझता हूं कि अंतर प्रक्रिया संचार के कई और विकल्पों में से दो विकल्प हो सकते हैं:

  1. शेयर्ड मेमोरी
  2. सॉकेट

वास्तव में मैंने देखा कि इन दो विकल्पों में एक एप्लिकेशन को डीबग करने के लिए Intellij Idea द्वारा उजागर किया गया था। मैं जानना चाहता हूं कि प्रत्येक दृष्टिकोण के पेशेवरों और विपक्ष क्या हैं।


एक नया तरीका डी-बस है।
ott--

@ ott-- D- बस यूनिक्स डोमेन सॉकेट का उपयोग नहीं करता है?

@BrianMarshall वास्तव में, डोमेन और tcp / ip सॉकेट्स।
ott--

यहाँ भी उत्तर हैं: stackoverflow.com/a/1844919/632951
पेसियर

जवाबों:


11

मेरे सिर के ऊपर से प्रत्येक के लिए कुछ फायदे। ध्यान दें कि इनमें से कुछ आइटम सभी मामलों में लागू नहीं हो सकते हैं; ये केवल सामान्य अवलोकन हैं।

सॉकेट

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

शेयर्ड मेमोरी

जरूरी नहीं कि एक syscall की आवश्यकता हो (इसलिए संभावित रूप से तेज)। साझा करने के लिए स्पष्ट रूप से डेटा को स्थानांतरित करने की आवश्यकता नहीं है - डेटा उपलब्ध कराया जा सकता है कि प्राप्तकर्ता पुनर्प्राप्त नहीं करता है (बैंडविड्थ को डेटा को बर्बाद करने की आवश्यकता नहीं है जो प्राप्तकर्ता उपयोग नहीं करेगा)। कोई सीरियलाइजेशन / डिसरियलाइजेशन स्टेप का मतलब संचार ओवरहेड पर बिताया गया समय नहीं है।


4
+1: सॉकेट्स वितरित सिस्टम तक पैमाने पर है जबकि साझा मेमोरी बहुत तेज है।
मौवीसील

@tylerl क्यों साझा की गई मेमोरी में syscall की आवश्यकता नहीं है?
गीक

@ गीक: पढ़ें कि आधुनिक ओएस में वर्चुअल मेमोरी प्रबंधन कैसे लागू किया जाता है। असल में, हुड के तहत साझा की गई मेमोरी को सामान्य प्रक्रिया मेमोरी के लगभग समान लागू किया जाता है। यह केवल इतना होता है कि एक ही भौतिक पृष्ठ 2 (या एन) विभिन्न प्रक्रियाओं में मैप किया जाता है। लेकिन एक बार जब वह मानचित्रण स्थापित हो जाता है, तो * px = 5 निर्देशों का एक ही सेट पैदा करता है, भले ही px एक नियमित चर को इंगित करता हो या यदि यह एक साझा मेमोरी खंड के अंदर इंगित करता है।
DXM

तकनीकी रूप से आपको सॉकेट पर डेटा को क्रमबद्ध करने की आवश्यकता नहीं है यदि गंतव्य आपके द्वारा भेजे गए प्रारूप में एक कच्ची बाइट स्ट्रीम को स्वीकार कर सकता है। ज्यादातर लोग स्पष्ट रूप से धारावाहिक करते हैं ताकि वे किसी को भी भेज सकें।
gbjbaanb

1
@gbjbaanb मुझे लगता है कि तकनीकी रूप से आप डेटा को क्रमबद्ध कर रहे हैं यदि यह बिट्स के अनुक्रमिक स्ट्रिंग के रूप में प्रसारित होता है, तो कोई बात नहीं कि एन्कोडिंग क्या है।
tylerl

6

सॉकेट्स एक-से-एक हैं। यदि आप एक ही चीज़ को कई प्रक्रियाओं में भेजना चाहते हैं, तो आपको कई सॉकेट चाहिए। साझा मेमोरी के साथ, आपके कई पाठक हो सकते हैं, और कई लेखक भी।

सॉकेट संसाधन गहन हैं। प्रत्येक संदेश ओएस के माध्यम से जाता है। साझा मेमोरी के साथ, आप साझा मेमोरी को मैप करते हैं लेकिन एक बार अपने एप्लिकेशन की मेमोरी में और तब से यह आपके उपयोग के लिए है। हालाँकि, आपको अभी भी ओएस के माध्यम से जाने की ज़रूरत है जब आपने साझा मेमोरी का उपयोग किया था; निचे देखो।

सॉकेट्स सिंक्रनाइज़ किए जाते हैं (इसलिए जब तक आप यूडीपी का उपयोग नहीं करते हैं)। साझा की गई मेमोरी के साथ, आपको अन्य प्रक्रियाओं को बताने के लिए लगभग अनिवार्य रूप से कुछ अतिरिक्त तंत्र की आवश्यकता होती है कि साझा मेमोरी को पढ़ना या लिखना ठीक नहीं है। ऐसा न करें और आप दूषित स्मृति के साथ समस्याओं में चलेंगे। उदाहरण: मान लीजिए कि प्रक्रिया A एक साझा साझा मेमोरी को पढ़ना शुरू कर देती है, लेकिन रीड के माध्यम से बाहर की ओर स्वैप हो जाती है। प्रोसेस बी साझा मेमोरी के उसी हिस्से को लिखता है। जब प्रक्रिया A पुनः आरंभ करता है और साझा की गई मेमोरी को पढ़ना जारी रखता है, तो उसने जो पढ़ा है वह पुराने और नए डेटा का एक मिश्मश है। इसे रोकने के लिए, आप अभी भी ओएस के माध्यम से जाते हैं जब आप साझा मेमोरी का उपयोग कर रहे होते हैं।

नेटवर्क सॉकेट का उपयोग करने वाले अनुप्रयोगों के सॉकेट-आधारित सेट को परिवर्तित करना काफी आसान है। आप अपनी लैब में सभी मशीनों में प्रोसेसिंग को फैला सकते हैं, या फिर आगे बढ़ा सकते हैं। बस साझा मेमोरी के साथ ऐसा नहीं कर सकते। आप साझा मेमोरी-आधारित समाधान के साथ एक मशीन में बंद हैं।

सॉकेट्स का उद्देश्य कम मात्रा में डेटा, बड़ी मात्रा में डेटा के लिए साझा की गई मेमोरी है। विभिन्न समस्याओं को हल करने के लिए विभिन्न तंत्र मौजूद हैं।

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