2010-05-18 10 views
6

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

  • मैं आईपीसी हिस्सा अलग कर दिया है, ताकि मैं भविष्य में यह अन्य तरीकों को बदल सकता है:

    यहाँ मेरी स्थिति है।

  • मेरे पास एक और तेज संस्करण लागू करने के लिए 3 सप्ताह हैं। ;-(
  • आईपीसी तेजी से, लेकिन यह भी अपेक्षाकृत आसान

मैं अलग आईपीसी दृष्टिकोण में देख कर दिया है लेने के लिए किया जाना चाहिए:। सॉकेट, पाइप, साझा स्मृति हालांकि, मैं भारतीय दंड संहिता में कोई अनुभव नहीं है, और वहाँ निश्चित रूप से कोई रास्ता नहीं मैं 3 सप्ताह में इस डेमो ... कौन सा भारतीय दंड संहिता सुरक्षित तरीका होगा?

धन्यवाद। साथ शुरू करने के लिए लिली

उत्तर

4

एक ऐसी ही सवाल अपने आप का सामना करना पड़ गया।

विफल हो सकता है मैंने निम्नलिखित पृष्ठों को उपयोगी पाया - IPC performance: Named Pipe vs Socket (विशेष रूप से) और Sockets vs named pipes for local IPC on Windows?

ऐसा लगता है कि सहमति है कि अगर आप वास्तव में प्रदर्शन के बारे में चिंतित हैं, तो साझा स्मृति यह तरीका है, लेकिन यदि आपके पास वर्तमान सिस्टम एक संदेश कतार है तो यह एक अलग संरचना हो सकती है ... विभिन्न संरचना । एक सॉकेट और/या नामित पाइप लागू करने में आसान हो सकता है, और यदि या तो आपके चश्मे को पूरा करता है तो आप वहां कर रहे हैं।

3

विंडोज़ पर, आप एक विशेष प्रकार की साझा मेमोरी-आधारित आईपीसी WM_COPYDATA का उपयोग कर सकते हैं। यह एक पुरानी, ​​लेकिन सरल तकनीक है: "प्रोसेस ए" एक संदेश भेजता है, जिसमें इसकी स्मृति में कुछ डेटा के लिए एक सूचक होता है, और "प्रक्रिया बी" प्रक्रियाओं (क्षमा करें) संदेश तक प्रतीक्षा करता है, उदा। डेटा की एक स्थानीय प्रति बनाता है। यह विधि बहुत तेज़ है और विंडोज 8 डेवलपर पूर्वावलोकन पर भी काम करती है (मेरा benchmark देखें)। किसी भी प्रकार के डेटा को प्रेषक पर क्रमबद्ध करके, और रिसीवर पक्ष पर इसे deserializing द्वारा इस तरह से पहुंचाया जा सकता है। संचार को अतुल्यकालिक बनाने के लिए प्रेषक और रिसीवर संदेश कतारों को लागू करना भी आसान है।

+0

आपके बेंचमार्क के मुताबिक, मुझे आश्चर्य हुआ कि Win7 का इतना बुरा प्रदर्शन क्यों है। – stanleyxu2005

+1

क्योंकि यह अपेक्षाकृत धीमी, एकल कोर एटम सीपीयू – kol

3

आप इस ब्लॉग पोस्ट https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/

की जाँच कर सकते हैं मूल रूप से यह तुलना Enduro/एक्स, जो POSIX कतारों (कर्नेल कतारों आईपीसी) ZeroMQ बनाम, जो संदेश, कई अलग अलग परिवहन वर्गों पर एक साथ वितरित कर सकता है सहित पर बनाया गया है। मल्टीकास्ट के लिए tcp:// (नेटवर्क सॉकेट), ipc://, inproc://, pgm:// और epgm://

चार्ट से आप देख सकते हैं कि किसी भी समय बड़े डेटा पैकेट वाले एंडुरो/एक्स क्यू पर चल रहे हैं, जो सॉकेट पर जीतते हैं।

दोनों सिस्टम प्रति सेकंड ~ 400 000 संदेश के साथ अच्छा चल रहे हैं, लेकिन 5 केबी संदेशों के साथ, कर्नेल कतार बेहतर चल रहे हैं।

Source: https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/

(छवि स्रोत: https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/)


अद्यतन: जवाब के रूप में एक और अद्यतन टिप्पणी bellow के लिए, मैं भी ipc:// पर ZeroMQ चलाने के लिए फिर से दौड़ना परीक्षण किया, देखें चित्र:

Source: https://publicwork.wordpress.com/2016/07/17/endurox-vs-zeromq/

जैसा कि हम देखते हैं कि ज़ीरोएमक्यू ipc:// बेहतर है, लेकिन फिर कुछ श्रेणी में एंडुरो/एक्स बेहतर परिणाम दिखाता है और फिर फिर से ज़ीरोएमक्यू खत्म हो जाता है।

इस प्रकार मैं कह सकता हूं कि आईपीसी चयन उस काम पर निर्भर करता है जो आप करना चाहते हैं।

ध्यान दें कि ज़ीरोएमक्यू आईपीसी पॉज़िक्स पाइप पर चलता है। जबकि एंड्रू/एक्स पॉज़िक्स कतारों पर चलता है।

+1

के साथ नेटबुक है, मुझे पूछने दो, आपने उद्धृत किया है, ** उद्धृत परीक्षण/तुलना ** ** ** उसी परिवहन वर्ग पर ज़ीरोएमक्यू का उपयोग नहीं कर रहा है (तुलना करने की कोशिश कर रहा है ** 'टीसीपी: //' ** ** ** आईपीसी: // '**)? क्या आप ** एक उचित सेब-टू-सेब तुलना परिणाम प्रदान कर पाएंगे ** ** ** ** ** ** ** एंड्रयू/एक्स और ज़ीरोएमक ** ** आईपीसी ** ** का उपयोग करते हैं? – user3666197

+1

ऊपर देखें, मैंने आईपीसी के साथ फिर से परीक्षण किया है: // –

+0

+1 देखभाल के लिए। एंडुरो/एक्स परिदृश्यों में कैसे काम करेगा जहां वितरित प्रणाली में बीएलओबी को कई परिवहन-वर्ग मिश्रित के साथ संसाधित किया जा रहा है - 'टीसीपी: //' (क्लस्टर-वितरित एसआईजी के लिए) + 'inproc: //' (सबसे तेज़/निम्न विलंबता के लिए इन-प्रोसेस संदेश-पासिंग) + 'epgm: //' (अंतिम सामग्री-स्ट्रीमिंग के लिए)? प्रदर्शन स्केलिंग कैसे काम करता है - एक बार 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 पीयरों को एक निश्चित मात्रा में I/O-threads ('.Context()' इंजन पर संचालित कर सकते हैं)? – user3666197