2011-03-29 9 views
28

क्या आप कृपया बता सकते हैं कि नेटटी काम करने के लिए थ्रेड पूल का उपयोग कैसे करती है? क्या मैं सही ढंग से समझता हूं, कि दो प्रकार के धागे-पूल हैं: मालिक और कार्यकर्ता। मालिकों को I/O करने के लिए उपयोग किया जाता है और कार्यकर्ता डेटा को संसाधित करने के लिए उपयोगकर्ता कॉलबैक (संदेश पुनर्प्राप्त) को कॉल करने के लिए उपयोग किया जाता है?नेटटी थ्रेड पूल का उपयोग कैसे करती है?

उत्तर

26

यह NioServerSocketChannelFactory दस्तावेज़

एक ServerSocketChannelFactory जो सर्वर की ओर से NIO आधारित ServerSocketChannel बनाता से है। यह गैर-अवरुद्ध I/O मोड का उपयोग करता है जो एनआईओ के साथ कई समवर्ती कनेक्शन कुशलतापूर्वक सेवा प्रदान करने के लिए पेश किया गया था।

कैसे धागे काम
ये दो प्रकार के एक NioServerSocketChannelFactory में धागे की कर रहे हैं; एक बॉस थ्रेड है और दूसरा कार्यकर्ता धागा है।

बॉस धागे
प्रत्येक बाध्य ServerSocketChannel अपने स्वयं के मालिक धागा है। उदाहरण के लिए, यदि आपने दो सर्वर पोर्ट जैसे 80 और 443 खोले हैं, तो आप में दो बॉस थ्रेड होंगे। एक मालिक धागा आने वाले कनेक्शन स्वीकार करता है जब तक कि पोर्ट अनबाउंड न हो। एक बार कनेक्शन सफलतापूर्वक स्वीकार किया जाता है, बॉस थ्रेड स्वीकृत चैनल को कार्यकर्ता धागे में से एक को पास करता है जो NioServerSocketChannelFactory प्रबंधित करता है।

कार्यकर्ता धागे
एक NioServerSocketChannelFactory एक या अधिक कार्यकर्ता धागे हो सकता है। एक कार्यकर्ता थ्रेड गैर-अवरुद्ध पढ़ने और गैर-अवरुद्ध मोड में एक या अधिक चैनलों के लिए लिखता है।

एनआईओ मॉडल में, bossThread देखभाल सभी घिरे सॉकेट ले (सॉकेट सुनने), workerThread देखभाल स्वीकृत-सॉकेट ले (शामिल आईओ और इस तरह के रूप में messageReceived घटना विधि कॉल)।

+0

इस तरह मैं भी समझता हूं। हालांकि, नेटटी के सभी उदाहरणों में, मैं एक कैश किए गए थ्रेडपूल के साथ बॉस पूल सेट करना देखता हूं। एक थ्रेड ट्रेडर का उपयोग क्यों न करें? क्या इसका कोई विशिष्ट कारण है? इस सवाल को एक नए के बजाय इस धागे में पूछना, बिंदु पर होना और चूंकि यह चर्चा पहले से ही उठाई जा चुकी है। –

14

नेटटी नियो कार्यान्वयन से संबंधित विवरण (3.2.4.Final) NioServerSocketChannelFactory।

कार्यकर्ता थ्रेड पूल कम से कम श्रमिक धागे की संख्या (वर्तमान में डिफ़ॉल्ट 2 * कोर की संख्या) वितरित करने में सक्षम होना चाहिए।

क्यों?

इस कार्यान्वयन के मामले में प्रत्येक कार्यकर्ता का अपना चयनकर्ता लूप होता है, इसका मतलब है कि प्रत्येक कर्मचारी चयनकर्ता पर सोने के लिए एक धागा "खाएगा"। साथ ही यह कार्यकर्ता (और संबंधित धागा) सभी वास्तविक लेखन और पढ़ने के लिए ज़िम्मेदार है (पाइपलाइन पर आग लगने वाली घटनाओं सहित, इसका मतलब है कि हैंडलर को उस श्रमिक धागे में निष्पादित किया जाता है)।

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

संबंधित मुद्दे