में लॉक फ्री मैप को लागू करने के लिए संभव है। हम नेटवर्क अनुप्रयोग आधारित सी/एस विकसित कर रहे हैं, हम पाते हैं कि std :: map में बहुत सारे ताले जोड़े गए हैं जो सर्वर का प्रदर्शन खराब हो गया है।क्या यह सी ++
मुझे आश्चर्य है कि लॉक-फ्री मानचित्र को लागू करना संभव है, यदि हां, तो कैसे? क्या वहां कोई ओपन सोर्स कोड है?
संपादित करें: असल में हम std :: मानचित्र का उपयोग सॉकेट जानकारी स्टोर करने के लिए, हम सॉकेट फ़ाइल वर्णन के आधार पर कैप्सूलीकरण था इस तरह के आईपी पता, पोर्ट, सॉकेट प्रकार, TCP या UDP, आदि के रूप में कुछ अन्य आवश्यक जानकारी शामिल करने के लिए ।
सारांश करने के लिए, हम एक वैश्विक मानचित्र कहते हैं कि यह
map<int fileDescriptor, socketInfor*> SocketsMap,
तो हर धागा जो डेटा भेजने के लिए प्रयोग किया जाता है SocketsMap तक पहुंच की आवश्यकता है है, और वे SocketsMap से पढ़ रहे हैं या SocketsMap पर लिखने से पहले म्युटेक्स जोड़ने के लिए , इस प्रकार पूरे आवेदन के समवर्ती स्तर की वजह से बहुत कम हो जाएगा o सॉकेट्समैप में जोड़ने वाले कई ताले।
समवर्ती स्तर की समस्या से बचने के लिए, हमारे पास दो समाधान हैं: 1. प्रत्येक सॉकेट को * अलग से स्टोर करें 2. किसी प्रकार का लॉक-फ्री मानचित्र का उपयोग करें।
मैं, ताला मुक्त नक्शे के कुछ प्रकार प्राप्त करना चाहते हैं, क्योंकि कोड इस समाधान के अनुसार आवश्यक बदलावों समाधान की तुलना में काफी कम कर रहे हैं 1.
@WozozCraig सभी निष्पक्षता में, यह विशेष रूप से सी ++ कहता है और यह विशेष रूप से सी कहता है ... वे बहुत अलग भाषाएं हैं, खासकर जब आप परमाणु चर पर विचार करते हैं। –
@AlexChamberlain एक उत्कृष्ट बिंदु, महोदय। मैं लिंक yank जाएगा। – WhozCraig
यदि आपको किसी सहयोगी कंटेनर की आवश्यकता है, लेकिन ऑर्डर करने की आवश्यकता नहीं है, तो हैश का उपयोग करना आसान हो सकता है जैसे 'std :: unordered_map'। यह आपके वर्तमान मोटे लॉकिंग के साथ भी तेज़ हो सकता है (विशेष रूप से यदि आप लॉक किए गए हिस्से के बाहर किसी भी महंगी हैश गणना को स्थानांतरित कर सकते हैं), लेकिन मुझे संदेह है कि कभी-कभी महंगी री-हैश आशावादी पुन: संतुलन की तुलना में संभालने में आसान होता है, आशावादी के लिए लॉकफ्री संस्करण। – Useless