मेरी राय में नहीं। यदि दोनों मॉडल अच्छी तरह लागू होते हैं (यह एक बड़ी आवश्यकता है) मुझे लगता है कि एनआईओ की अवधारणा को जीतना चाहिए।
कंप्यूटर के दिल में कोर हैं। कोई फर्क नहीं पड़ता कि आप क्या करते हैं, आप कोर के मुकाबले अपने आवेदन को समानांतर नहीं कर सकते हैं। यानी यदि आपके पास 4 कोर मशीन है, तो आप केवल एक ही समय में 4 चीजें कर सकते हैं (मैं यहां कुछ विवरणों पर चमक रहा हूं, लेकिन यह तर्क के लिए पर्याप्त है)।
कि सोचा विस्तार करते हुए, अगर तुम कभी कोर की तुलना में अधिक धागे है, तो आप बेकार की है। वह अपशिष्ट दो रूप लेता है। सबसे पहले अतिरिक्त धागे का ऊपरी भाग है। दूसरा समय है धागे के बीच स्विचिंग। दोनों शायद मामूली हैं, लेकिन वे वहां हैं।
आदर्श रूप से, आपके पास कोर प्रति सिंगल थ्रेड है, और उनमें से प्रत्येक थ्रेड अपने मूल पर 100% प्रोसेसिंग गति पर चल रहा है। आदर्श में कार्य स्विचिंग नहीं होगी। बेशक ओएस है, लेकिन यदि आप 16 कोर मशीन लेते हैं और ओएस के लिए 2-3 धागे छोड़ देते हैं, तो शेष 13-14 आपके ऐप की ओर जाते हैं। वे धागे के भीतर अपने ऐप को स्विच कर सकते हैं, जैसे कि जब वे आईओ आवश्यकताओं से अवरुद्ध होते हैं, लेकिन ओएस स्तर पर उस लागत का भुगतान नहीं करना पड़ता है। इसे अपने ऐप में लिखें।
इस स्केलिंग का एक उत्कृष्ट उदाहरण SEDA http://www.eecs.harvard.edu/~mdw/proj/seda/ में देखा जाता है। यह मानक थ्रेड-प्रति-अनुरोध मॉडल की तुलना में लोड के तहत बहुत बेहतर स्केलिंग दिखाता है।
मेरा व्यक्तिगत अनुभव नेटटी के साथ है। मेरे पास एक साधारण ऐप था। मैंने इसे टॉमकैट और नेटटी दोनों में अच्छी तरह कार्यान्वित किया। फिर मैंने इसे 100 के समवर्ती अनुरोधों के साथ परीक्षण किया (800 से ऊपर मुझे विश्वास है)। आखिरकार टोमकैट ने एक क्रॉल में धीमा कर दिया और बेहद विस्फोट/लगी व्यवहार का प्रदर्शन किया। जबकि नेटटी कार्यान्वयन ने प्रतिक्रिया समय में वृद्धि की, लेकिन अविश्वसनीय रूप से समग्र थ्रूपुट के साथ जारी रखा।
कृपया ध्यान दें, यह ठोस कार्यान्वयन पर निर्भर करता है। समय के साथ एनआईओ अभी भी बेहतर हो रहा है। हम सीख रहे हैं कि हमारे सर्वर ओएस को बेहतर तरीके से काम करने के साथ-साथ ओएस कार्यक्षमता को बेहतर लाभ उठाने के लिए जेवीएम को कैसे कार्यान्वित किया जाए। मुझे नहीं लगता कि विजेता को अभी तक घोषित किया जा सकता है, लेकिन मेरा मानना है कि एनआईओ अंतिम विजेता होगा, और यह पहले से ही काफी अच्छा कर रहा है।
यह एक बहुत ही रोचक असली दुनिया परीक्षण है। कई अनुप्रयोगों के लिए, 800 समवर्ती अनुरोध वास्तव में इतना नहीं है। मुझे आश्चर्य है कि टॉमकैट में अंतराल संदर्भ-स्विचिंग (या जीसी, @irreputable सुझावों के रूप में) के कारण था, जिसका अर्थ यह होगा कि थ्रेड-प्रति-अनुरोध मॉडल स्वयं टॉमकैट कार्यान्वयन के बजाय गलती पर था। – Graham
निष्पक्ष होने के लिए, यह एक एकल सर्वर था जिसे परीक्षण किया जा रहा था, क्लस्टर नहीं। 800 अनुरोधों के लिए। मेरे अनुभव में, 800 समवर्ती काफी ऊंचा है। कनेक्शन से समवर्ती अनुरोधों को अलग करना महत्वपूर्ण है। यदि आपको उस लोड पर 100ms रेंज में प्रतिक्रिया समय मिलता है, तो आप प्रति सेकेंड 8k अनुरोधों का समर्थन कर रहे हैं। यह एक बॉक्स के लिए बुरा नहीं है। स्केल करें कि पूरे दिन के लिए और आप एक सर्वर के साथ 700 मिलियन अनुरोधों को संभालते हैं। बहुत से अनुप्रयोगों की आवश्यकता नहीं है। – rfeak