"स्वीकार्य देरी" पूरी तरह से आपके आवेदन पर निर्भर करता है। एक ही धागे पर सबकुछ से निपटने से वास्तव में मदद मिल सकती है यदि आपको बहुत सख्त विलंबता आवश्यकताएं मिलती हैं। सौभाग्य से ज्यादातर अनुप्रयोगों में कठोर आवश्यकताओं की आवश्यकता नहीं है।
बेशक, यदि केवल एक धागा अनुरोध प्राप्त करने में सक्षम है, तो प्रतिक्रिया की गणना के लिए उस धागे को बांधना मतलब होगा कि आप किसी अन्य अनुरोध को स्वीकार नहीं कर सकते हैं। आप जो कर रहे हैं उसके आधार पर आप "थ्रेड प्रति अनुरोध" मॉडल से बचने के लिए एसिंक्रोनस आईओ (आदि) का उपयोग कर सकते हैं, लेकिन यह काफी कठिन आईएमओ है, और अभी भी थ्रेड संदर्भ स्विचिंग के साथ समाप्त होता है।
कभी-कभी यह बहुत से धागे को संसाधित करने से बचने के लिए अनुरोधों को कतार में उचित है: यदि आपका हैंडलिंग सीपीयू-बाध्य है, तो यह सैकड़ों धागे रखने के लिए अधिक समझ में नहीं आता है - कार्यों के निर्माता/उपभोक्ता कतार के लिए बेहतर और प्रति कोर लगभग एक थ्रेड पर उन्हें वितरित करें। यह मूल रूप से ThreadPoolExecutor
करेगा यदि आप इसे ठीक से सेट अप करते हैं। यह तब भी काम नहीं करता है जब आपके अनुरोध बाहरी सेवाओं (डिस्क सहित, लेकिन मुख्य रूप से अन्य नेटवर्क सेवाओं) के लिए बहुत समय व्यतीत करते हैं ... उस बिंदु पर आपको या तो असीमित निष्पादन मॉडल का उपयोग करने की आवश्यकता होती है जब भी आप संभावित रूप से एक अवरुद्ध कॉल के साथ कोर निष्क्रिय, या आप थ्रेड संदर्भ स्विचिंग हिट लेते हैं और थ्रेड शेड्यूलर पर भरोसा करते हैं, ताकि यह काफी अच्छी तरह से काम कर सके।
नीचे की रेखा यह है कि विलंबता आवश्यकताओं को कठिन हो सकता है - मेरे अनुभव में वे थ्रूपुट आवश्यकताओं की तुलना में काफी कठिन हैं, क्योंकि वे स्केल करने के लिए बहुत कठिन हैं। यह वास्तव में हालांकि संदर्भ पर निर्भर करता है।
स्रोत
2010-05-28 06:08:27
मुझे नहीं लगता कि प्रत्येक आने वाली घटना के लिए एक नया धागा बनाना सबसे अच्छा तरीका है। मेरे पास एक निश्चित थ्रेडपूल (शायद स्केलिंग भी) होगा जो आने वाली घटनाओं को एक या अधिक श्रोता धागे – RecursiveExceptionException
"द्वारा सूचीबद्ध सूची में संसाधित करता है ..." प्रत्येक आने वाली घटना के लिए एक नया धागा सबसे अच्छा तरीका है "- जहां किया गया आप इसे मेरे पोस्ट में देखते हैं, जबकि मैंने लिखा: "... धागे के राउंड रॉबिन पूल"? – Dewfy
ओह। मैंने इसे गलत समझा। केवल "थ्रेड हटाएं" देखा और सोचा: "हाँ यह अच्छा नहीं है": पी – RecursiveExceptionException