से संबंधित स्रोत डाउनलोड कर सकते हैं। मुझे विश्वास है कि आप इसे .NET में किसी भी अन्य एसिंक्रोनस ऑपरेशन के रूप में करते हैं: आप इस मामले में BeginAcceptSocket में BeginXxx संस्करण को कॉल करते हैं। आपका कॉलबैक थ्रेड पूल पर निष्पादित होगा।
पूल किए गए थ्रेड आम तौर पर थ्रेड-प्रति-कनेक्शन से काफी बेहतर होते हैं: एक बार जब आप कनेक्शन के कुछ दस गुना अधिक हो जाते हैं, तो सिस्टम वास्तविक काम करने की तुलना में धागे के बीच स्विच करने में बहुत कठिन काम करता है। इसके अलावा, प्रत्येक धागे का अपना ढेर होता है जो आम तौर पर आकार में 1 एमबी होता है (हालांकि यह लिंक झंडे पर निर्भर करता है) जिसे 2 जीबी वर्चुअल एड्रेस स्पेस (32-बिट सिस्टम पर) में पाया जाना चाहिए; अभ्यास में यह आपको 1000 से कम धागे तक सीमित करता है।
मुझे यकीन नहीं है कि .NET का थ्रेडपूल वर्तमान में इसका उपयोग करता है, लेकिन विंडोज़ में एक कर्नेल ऑब्जेक्ट है जिसे I/O प्राप्ति पोर्ट कहा जाता है जो स्केलेबल I/O में सहायता करता है। आप इस ऑब्जेक्ट के साथ धागे को जोड़ सकते हैं, और I/O अनुरोध (इनकमिंग कनेक्शन स्वीकार करने सहित) इसके साथ जुड़े जा सकते हैं। जब कोई I/O पूरा हो जाता है (उदा। कनेक्शन आता है) विंडोज एक प्रतीक्षा थ्रेड जारी करेगा, लेकिन केवल तभी जब चलने योग्य थ्रेड (किसी अन्य कारण से अवरुद्ध नहीं) की संख्या पूर्णता पोर्ट के लिए कॉन्फ़िगर की गई स्केलेबिलिटी सीमा से कम है। आम तौर पर आप इसे कोर की संख्या के एक छोटे से एकाधिक पर सेट करेंगे।
स्रोत
2008-09-15 13:22:00
स्रोत कोड के लिए धन्यवाद, मैं इसे इस तरह कोडिंग करूँगा। नए धागे महंगा हो सकते हैं, लेकिन चूंकि मेरे पास 5 या 6 समवर्ती आने वाले कनेक्शन से अधिक पैमाने नहीं है, यह अभी ठीक होगा। –
सोचें श्रोता और टीसीपी लिस्टनर उदाहरण में उलझन में आ गए, अन्यथा अच्छा कोड। यह पाया गया: http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.beginaccepttcpclient.aspx जो मैं यहां देता हूं उसके आधार पर। –
वर्तमान संदर्भ प्रदर्शन संदर्भ में अत्यधिक खतरनाक है, मैं इसे संपादित कर दूंगा ... – Beygi