मैं एक समस्या के बीच में हूं जहां मैं यह तय करने में असमर्थ हूं कि कौन सा समाधान लेना है।थ्रेड पूल बनाम कई व्यक्तिगत थ्रेड
समस्या थोड़ा अद्वितीय है। आइए इसे इस तरह से रखें, मैं लगातार नेटवर्क से डेटा प्राप्त कर रहा हूं (प्रति सेकंड 2 से 4 बार)। अब प्रत्येक डेटा एक अलग से संबंधित है, कहें, समूह। अब, इन समूहों, समूह 1, समूह 2 और अन्य को कॉल करने दें।
प्रत्येक समूह के लिए एक समर्पित काम कतार जहां नेटवर्क से डेटा फ़िल्टर और प्रसंस्करण के लिए उसके संगत समूह में जोड़ा जाता है।
पहले तो मुझे जो काम कतार, यह प्रक्रिया से डेटा ले और फिर राज्य को अवरुद्ध करने के लिए चला जाता है जाएगा समूह प्रति एक समर्पित धागा (लिंक्ड को अवरुद्ध करने के लिए कतार का उपयोग) बनाया।
लेकिन मेरे वरिष्ठ सुझाव दिया है कि मैं धागा पूल का उपयोग करना चाहिए क्योंकि इस तरह धागे अभ्यस्त अवरुद्ध हो और प्रसंस्करण के लिए अन्य समूहों द्वारा प्रयोग करने योग्य हो जाएगा।
लेकिन यहाँ बात है, डेटा im हो रही काफी तेजी से और समय एक धागा ले जाता है यह, के लिए संभवतः, नहीं मोड अवरुद्ध में जाने थ्रेड के लिए काफी लंबे समय है कार्रवाई करने के लिए। और यह भी गारंटी देगा कि डेटा अनुक्रमिक रूप से संसाधित हो जाता है (नौकरी 1 नौकरी 2 से पहले किया जाता है), जो पूलिंग में बहुत कम संभावनाएं होती हैं, ऐसा नहीं हो सकता है।);
मेरे वरिष्ठ भी सच है कि पूलिंग इसलिए भी कि धागे जमा कर रहे हैं (आईएम सोच वह वास्तव में शब्द के लिए चला गया) हमें स्मृति के बहुत सारे की बचत होगी पर आमादा है। हालांकि मैं इस से सहमत नहीं हूं क्योंकि, मैं व्यक्तिगत रूप से सोचता हूं, पूल करता हूं या नहीं, प्रत्येक धागे को अपनी खुद की ढेर स्मृति मिलती है। जब तक थ्रेड पूल में कुछ न हो जो मुझे पता नहीं है।
एक आखिरी बात, मैंने हमेशा सोचा कि पूलिंग मदद करता है कि कम समय के लिए बड़ी संख्या में नौकरियां कहां दिखाई देती हैं। यह समझ में आता है क्योंकि थ्रेड स्पॉटिंग एक प्रदर्शन मार डालेगी क्योंकि थ्रेड में आने वाले समय की नौकरी करने पर खर्च किए गए समय से कहीं अधिक है। तो पूलिंग बहुत मदद करता है।
लेकिन मेरे मामले में समूह 1, समूह 2, ..., समूह हमेशा जीवित रहता है। तो यदि डेटा है या नहीं तो वे अभी भी वहां होंगे। तो धागा spawning यहाँ मुद्दा नहीं है।
मेरे वरिष्ठ आश्वस्त नहीं है और मुझे पूलिंग समाधान के साथ जाने के लिए अपनी स्मृति पदचिह्न बहुत अच्छा है क्योंकि चाहता है।
तो, कौन सा रास्ता लेना है?
धन्यवाद।
इस तरह की स्थिति में केवल एक ही जवाब है। ठंडा कठिन तथ्यों! साबित करें कि उचित नियंत्रित मॉडल/प्रोटोटाइप के साथ बेहतर है। आप दोनों आश्चर्यचकित हो सकते हैं क्योंकि प्रत्येक अलग-अलग परिस्थितियों में मान्य हो सकता है। –
सीवाईए ज्ञापन की आवश्यकता है - एक ईमेल में अपने मुद्दों/चिंताओं का विस्तार करें, फिर अपने वरिष्ठ द्वारा अनुशंसित पूल किए गए समाधान का उपयोग करें। यदि पूल किए गए डिज़ाइन में समस्याएं हैं, तो आप संरक्षित हैं :)। आपकी आवश्यकता को देखते हुए, मैं शायद प्रति समूह समर्पित थ्रेड के साथ जाऊंगा - धागे केवल स्टार्टअप पर बनाए जाते हैं और एक थ्रेड को एसिंच राज्य-इंजन की तुलना में डीबग करना आसान होता है जिसे कुछ करने की आवश्यकता होने पर पूल को लगातार जारी किया जाना चाहिए। यदि थ्रेडपूल के साथ एक एसिंच दृष्टिकोण का उपयोग नहीं किया जाता है, तो किसी भी ब्लॉकिंग कॉल पूल थ्रेड को अवरुद्ध कर देगा, सिस्टम को और थ्रेड बनाने के लिए मजबूर कर देगा :( –
यदि आपका ऐप प्रति समूह एक थ्रेड बनाता है, और प्रत्येक थ्रेड डेटा को अपनी कतार से लेता है और असीम रूप से चलता है, आपके पास प्रभावी रूप से एक निश्चित थ्रेड पूल होता है। एक "असली" थ्रेड पूल बनाने के साथ ही धागे की संख्या बहुत अधिक नहीं बदलेगी। "वास्तविक" थ्रेड पूल का उपयोग करके आप क्या हासिल कर सकते हैं केवल एक छोटी संख्या को असाइन करना है धागे सभी कतारों से डेटा लेने के लिए, और थ्रेड पूल बढ़ सकता है और थ्रू पूल कतार में बहुत से कार्य प्रतीक्षा कर रहे हैं, या यदि बहुत सारे धागे निष्क्रिय हैं तो –