मैं कस्टम सर्वर को कार्यान्वित कर रहा हूं जिसे बहुत लंबे समय तक रहने वाले कनेक्शन (100K या अधिक) बनाए रखने की आवश्यकता है। सर्वर बस सॉकेट के बीच संदेश पास करता है और यह कोई गंभीर डेटा प्रोसेसिंग नहीं करता है। संदेश छोटे होते हैं, लेकिन उनमें से कई को हर सेकेंड प्राप्त/भेज दिया जाता है। विलंबता को कम करना लक्ष्यों में से एक है। मुझे एहसास है कि एकाधिक कोर का उपयोग प्रदर्शन में सुधार नहीं करेगा और इसलिए मैंने run_one
या poll
io_service
ऑब्जेक्ट के तरीकों को कॉल करके सर्वर को एक थ्रेड में चलाने का निर्णय लिया। वैसे भी बहु थ्रेडेड सर्वर लागू करने के लिए बहुत कठिन होगा।बूस्ट एएसओ एकल थ्रेडेड प्रदर्शन
संभावित बाधाएं क्या हैं? Syscalls, बैंडविड्थ, समापन कतार/घटना demultiplexing? मुझे संदेह है कि प्रेषक हैंडलर को लॉकिंग की आवश्यकता हो सकती है (जो आंतरिक रूप से एएसओ लाइब्रेरी द्वारा किया जाता है)। Boost.asio में कतार लॉकिंग (या कोई अन्य लॉकिंग) भी अक्षम करना संभव है?
संपादित करें: संबंधित प्रश्न। Syscall प्रदर्शन एकाधिक धागे के साथ सुधार करता है? मेरी भावना यह है कि क्योंकि सिस्को कर्नेल द्वारा परमाणु/सिंक्रनाइज़ किए जाते हैं, इसलिए अधिक धागे गति में सुधार नहीं करेंगे।
यदि आप सब कुछ एक थ्रेड में चला रहे हैं, तो आपको किसी भी (हस्तलिखित) ताले की आवश्यकता नहीं है। –
एकाधिक कोर का उपयोग करने से प्रदर्शन में सुधार होगा - पिछले साल मैंने किए गए कुछ बेंचमार्क के लिए http://cmeerw.org/blog/748.html#748 और http://cmeerw.org/blog/746.html#746 देखें। – cmeerw