2012-02-10 22 views
11

क्या किसी को अंतर-थ्रेड संचार के लिए जीएलआईबी के GAsyncQueue बनाम POSIX message_queue के सापेक्ष प्रदर्शन का कोई विचार है? मेरे पास लिनक्स के शीर्ष पर सी में लागू होने के लिए कई छोटे संदेश (एक तरफ और अनुरोध-प्रतिक्रिया प्रकार) होंगे (अभी के लिए; बाद में विंडोज़ को पोर्ट किया जा सकता है)। मैं यह तय करने की कोशिश कर रहा हूं कि किस का उपयोग करना है।जीएलआईबी के GAsyncQueue बनाम POSIX message_queue

मुझे जो पता चला है वह है कि जीएलआईबी का उपयोग पोर्टेबिलिटी उद्देश्यों के लिए बेहतर है, लेकिन पॉज़िक्स एमक के पास उन पर चयन या मतदान करने में सक्षम होने का लाभ है।

हालांकि, मुझे कोई जानकारी नहीं मिली है जिसके प्रदर्शन बेहतर है।

उत्तर

14

चूंकि मेरे प्रश्न पर कोई प्रतिक्रिया नहीं थी, इसलिए मैंने कुछ प्रदर्शन परीक्षण चलाने का फैसला किया। मुख्य विचार http://cybertiggyr.com/throughput/throughput.html से लिया गया था। परीक्षण विचार था:

  • दो धागे (pthreads/gthreads) बनाएं।
  • एक थ्रेड डेटा का उत्पादन करता है और आईपीसी को भागों में लिखा जाता है जब तक कि 1024 एमबी डेटा नहीं भेजा जाता।
  • अन्य थ्रेड आईपीसी से डेटा उपभोग किया। मैंने 4, 64, 256, 512 और 1024 बाइट्स के खंड आकार के साथ परीक्षण किया। मैंने GAsyncQueue (gthreads के साथ), POSIX संदेश कतार और यूनिक्स डोमेन सॉकेट (pthreads के साथ) के साथ परीक्षण किया।

    enter image description here

    संक्षेप में, पर्फ़ (GAsyncQueue)> पर्फ़ (MQ)> पर्फ़ (यूनिक्स सॉकेट), हालांकि GAsyncQueue और POSIX संदेश कतार के प्रदर्शन कर रहे हैं:

यहाँ परिणाम प्राप्त है ज्यादातर मामलों में तुलनीय - अंतर केवल छोटे संदेश आकार के साथ होता है।

मैं सोच रहा था कि कैसे जीनसिंक्यूयूयू को लिनक्स के मूल संदेश कतार कार्यान्वयन की तुलना में बेहतर प्रदर्शन की तुलना करने के लिए लागू किया गया है। यह एक दयालुता है कि इसका उपयोग अंतर प्रक्रिया संचार के लिए नहीं किया जा सकता है, जैसे कि अन्य दो कर सकते हैं।

+1

बहुत रोचक। मैंने आपका उत्तर और प्रश्न उठा लिया है, शायद यह आपको ग्राफ पोस्ट करने देगा। – kalev

+0

मैंने कुछ और प्रयोग चलाए: उपभोक्ताओं को यह जानने के लिए धागे के बीच जोड़ा गया संकेत कि डेटा तैयार किया गया है। मैंने eventfd लिनक्स तकनीक का उपयोग किया। और जैसे ही मैंने ऐसा किया, मैंने देखा कि GAsyncQueue का प्रदर्शन दूसरों के समान होना चाहिए। – dbikash

+1

क्या यह परिणाम स्पष्टीकरण देता है? यह कि सभी लिनक्स आईपीसी तंत्र कर्नेल के माध्यम से जाते हैं और इसलिए समान प्रदर्शन होता है। GAsyncQueue किसी भी तरह उपयोगकर्ता-स्थान कार्यान्वयन है - अतिरिक्त उपयोगकर्ता स्थान - कर्नेल स्पेस कॉपी से बचा जाता है, जिसके परिणामस्वरूप बेहतर प्रदर्शन होता है। और जैसे ही eventfd तंत्र जोड़ा जाता है, फिर कर्नेल तस्वीर में आता है। क्या यह समझ सही है? – dbikash