2010-07-07 4 views
5

मुझे आश्चर्य है कि कगार कहां है जिसके बाद एक थ्रेड पूल का उपयोग किया जाना चाहिए। थ्रेड पूल का उपयोग किये बिना प्रति सेकेंड कितने नए थ्रेड बना सकते हैं, फिर भी ध्यान देने योग्य प्रदर्शन जुर्माना से परहेज करते हैं?जावा में एक नया धागा बनाने के लिए कितना महंगा है? हमें थ्रेड पूल का उपयोग करने पर विचार कब करना चाहिए?

क्या कोई अवलोकन योग्य ओपन-सोर्स थ्रेड-पूल कार्यान्वयन है?

उत्तर

4

लागत को ध्यान में रखते हुए, एकमात्र वैध उत्तर यह है कि आप अपने लिए परीक्षण करें (आपको यह बताने के लिए सुरुचिपूर्ण तरीका नहीं है कि मैंने कभी ऐसा परीक्षण नहीं किया है, और ऐसा कभी नहीं करेगा, क्योंकि आधुनिक निष्पादन तंत्र बहुत उन्नत सृजन प्रदान करता है/विनाश तंत्र)।

मौजूदा कार्यान्वयन Consdering, जावा आधुनिक संस्करण (जावा 5 के साथ शुरू) कि java.util.concurrent की सबसे आधुनिक अवधारणाओं के साथ एक धागा पूल के लाभों को जोड़ती है ThreadPoolExecutor के विभिन्न उपवर्गों प्रदान करता है: निष्पादकों।

इसके अलावा, मैं थ्रेड के बारे में भूलने और रननेबल, कॉल करने योग्य और अन्य उन्नत गणना वस्तुओं के साथ उन्हें दोबारा हटाने के लिए पर्याप्त अनुशंसा नहीं करता। इस तरह, आप आसानी से निष्पादकों के कार्यान्वयन को स्विच कर सकते हैं।

+0

निष्पादक स्थिर उपयोगिता वर्ग बस थ्रेडपूलएक्ससेलर का एक उदाहरण बनाने की पेशकश करता है जो कि किस विधि के आधार पर कॉन्फ़िगर किया गया है। –

5

आपको हमेशा एक थ्रेड पूल का उपयोग करना चाहिए। न केवल प्रदर्शन के लिए, बल्कि उपयोग की आसानी के लिए java.util.concurrent पैकेज आपको देता है। जावा 5 और बाद में, थ्रेड पूलिंग में बनाया गया है।

'थ्रेड' के संदर्भ में सोचने के बजाय, Executor इंटरफ़ेस का उपयोग करने के लिए आपको आवश्यक कार्यों को निष्पादित करने के लिए उपयोग करें।

Executor executor = Executors.newFixedThreadPool(5); 

java.util.concurrent पैकेज पर सभी दस्तावेज़ यहाँ है: http://java.sun.com/javase/6/docs/api/java/util/concurrent/package-frame.html

0

बनाना धागे हमेशा महंगा है, मंच की परवाह किए बिना एक नया थ्रेड पूल का निर्माण के रूप में सरल रूप में है। धागा बनाने के लिए वास्तविक समय ओएस पर निर्भर करता है।

यदि आप अल्पकालिक धागे अक्सर बनाते हैं तो मैं थ्रेड पूल का उपयोग करने की सलाह दूंगा। उदाहरण के लिए, यदि आपके आवेदन का प्राथमिक कार्य ऐसे अल्पकालिक कार्यों की सेवा करना है, तो एक थ्रेड पूल बहुत अच्छा होगा।

यदि आप बहुत सारे धागे बनाते हैं तो एक थ्रेड पूल भी अच्छा होता है। धागे के बीच संदर्भ स्विचिंग भी प्रदर्शन को मार सकता है। समकालीन क्वाड-कोर पीसी आर्किटेक्चर पर लंबी कहानी छोटी है, आपको एक ही समय में 200 से अधिक धागे चलाने का लक्ष्य रखना चाहिए।

+2

किसी ने यहां एक प्रश्न का उत्तर देते समय इसे माप लिया: http://stackoverflow.com/questions/2117072/java-thread-creation-overhead उन्होंने प्रति सेकंड 10,000 धागे बनाए, इसलिए यह बहुत महंगा नहीं है। –

+0

धागे बनाना ठीक हो सकता है, जैसा कि जावा में मुझे लगता है कि वास्तविक थ्रेड केवल तभी बनाए जाते हैं जब थ्रेड विधि शुरू होती है। हालांकि, संदर्भ स्विचिंग के कारण 10,000 धागे एक प्रदर्शन हत्यारा हैं। – Nick