अनिवार्य रूप से, पाइप - नाम या अज्ञात - संदेश पास होने की तरह उपयोग किया जाता है। कोई प्राप्तकर्ता को जानकारी का एक टुकड़ा भेजता है और प्राप्तकर्ता इसे प्राप्त कर सकता है। साझा स्मृति डेटा प्रकाशित करने की तरह अधिक है - कोई साझा डेटा में डेटा रखता है और पाठकों (संभावित रूप से कई) को सिंक्रनाइज़ेशन का उपयोग करना चाहिए उदा। सेफफोर्स के माध्यम से इस तथ्य के बारे में जानने के लिए कि नया डेटा है और जानकारी को ढूंढने के लिए मेमोरी क्षेत्र को कैसे पढ़ा जाए, उसे जानना चाहिए।
पाइप के साथ सिंक्रनाइज़ेशन सरल है और पाइप तंत्र में ही बनाया गया है - आपके पढ़ने और लिखने से कुछ दिलचस्प होने पर ऐप को फ्रीज और अनफ्रीज़ कर दिया जाएगा। साझा स्मृति के साथ, असीमित रूप से काम करना आसान है और थोड़ी देर में केवल एक बार नए डेटा की जांच करें - लेकिन अधिक जटिल कोड की लागत पर। इसके अलावा आप कई से अधिक संचार प्राप्त कर सकते हैं लेकिन इसके लिए और अधिक काम की आवश्यकता है। इसके अलावा, उपरोक्त के कारण, पाइप-आधारित संचार की डीबगिंग साझा स्मृति को डीबग करने से आसान है।
एक मामूली अंतर यह है कि फीफो सीधे फाइल सिस्टम में दिखाई दे रहे हैं जबकि साझा स्मृति क्षेत्रों को आपके प्रबंधन के लिए ipcs
जैसे विशेष उपकरण की आवश्यकता होती है। एक साझा मेमोरी सेगमेंट बनाएं लेकिन आपका ऐप मर जाता है और खुद के बाद साफ नहीं होता है (उसी तरह सेफफोर्स और कई अन्य सिंक्रनाइज़ेशन मैकेनिज्म के लिए जाता है जिन्हें आपको साझा मेमोरी के साथ उपयोग करने की आवश्यकता हो सकती है)।
साझा स्मृति आपको बफरिंग और संसाधन उपयोग पर अधिक नियंत्रण देती है - ओएस द्वारा अनुमत सीमाओं के भीतर यह तय करता है कि आवंटित करने के लिए कितनी मेमोरी और इसका उपयोग कैसे किया जाए। पाइप के साथ, ओएस स्वचालित रूप से चीजों को नियंत्रित करता है, इसलिए एक बार फिर आप कुछ लचीलापन खो देते हैं लेकिन अधिक काम से मुक्त होते हैं।
सबसे महत्वपूर्ण बिंदुओं का सारांश: एक से एक संचार के लिए पाइप, कम कोडिंग और ओएस को चीजों को संभालने देना, कई से अधिक लोगों के लिए साझा स्मृति, चीजों पर अधिक मैन्युअल नियंत्रण, लेकिन अधिक काम की लागत पर और कठिन डीबगिंग।
स्रोत
2012-03-14 13:30:04
ध्यान दें कि लिखने पर केवल परमाणु होते हैं यदि आकार में PIPE_BUF से अधिक नहीं है। –