थ्रेड पूल क्या है?


62

कोई एक थ्रेडपूल कैसे लागू करेगा? मैं "थ्रेडपूल" के लिए विकिपीडिया पर पढ़ रहा हूं, लेकिन मैं अभी भी यह पता नहीं लगा सकता कि इस प्रश्न को हल करने के लिए किसी को क्या करना चाहिए (संभवत: इसलिए कि मुझे समझ में नहीं आया कि एक थ्रेडपूल सरल शब्दों में क्या है)।

क्या कोई मुझे स्पष्ट अंग्रेजी में समझा सकता है कि थ्रेडपूल क्या है और कोई इस प्रश्न का उत्तर कैसे देगा?

जवाबों:


96

एक थ्रेड पूल पूर्व-तात्कालिक, निष्क्रिय धागे का एक समूह है जो काम देने के लिए तैयार है। ये प्रत्येक कार्य के लिए नए थ्रेड को तत्काल पसंद करने पर पसंद किए जाते हैं, जब छोटी संख्या के बजाय लंबे समय तक किए जाने वाले छोटे कार्यों की एक बड़ी संख्या होती है। यह कई बार बड़ी संख्या में थ्रेड बनाने के ओवरहेड को रोकने के लिए रोकता है।

कार्यान्वयन पर्यावरण द्वारा अलग-अलग होगा, लेकिन सरलीकृत शब्दों में, आपको निम्नलिखित की आवश्यकता है:

  • थ्रेड बनाने और उन्हें निष्क्रिय स्थिति में रखने का एक तरीका। यह तब तक काम कर सकता है जब तक कि पूल हाथ से काम न कर ले। (यह म्यूटेक्स के साथ भी किया जा सकता है।)
  • निर्मित थ्रेड्स को संग्रहीत करने के लिए एक कंटेनर, जैसे कि एक कतार या कोई अन्य संरचना जिसमें पूल में एक धागा जोड़ने और उसे बाहर खींचने का एक तरीका है।
  • काम करने में उपयोग करने के लिए थ्रेड्स के लिए एक मानक इंटरफ़ेस या अमूर्त वर्ग। यह एक अमूर्त वर्ग हो सकता है जिसे Taskएक execute()विधि कहा जाता है जो काम करता है और फिर लौटता है।

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

जब पूल को एक हाथ दिया जाता है Task, तो यह कंटेनर से एक धागा लेता है (या कंटेनर खाली होने पर उपलब्ध होने का इंतजार करता है), इसे हाथ करता है Task, और बाधा को पूरा करता है। यह निष्क्रिय थ्रेड को फिर से शुरू करने का कारण बनता है, इसकी execute()विधि को लागू करते Taskहुए दिया गया था। एक बार निष्पादन पूरा हो जाने के बाद, थ्रेड पुनः उपयोग के लिए कंटेनर में डालने के लिए पूल में वापस जाता है और फिर अपने अवरोध को पूरा करता है, जब तक कि चक्र दोहराता है तब तक वह खुद को सोता नहीं है।


19
एक थ्रेड पूल पूर्व-तात्कालिक, निष्क्रिय धागे का एक समूह है जो काम देने के लिए तैयार है। [...] यह एक बड़ी संख्या में एक धागा बनाने के ओवरहेड को रोकने के लिए होने से रोकता है। - यह Google द्वारा थूकना चाहिए जब भी कोई "थ्रेड पूल"
खोजता है

क्या थ्रेड पूल निर्माण में आंतरिक रूप से अवरोध शामिल है? क्या आप इन पंक्तियों पर संदर्भ साझा कर सकते हैं?
ओवरएक्सचेंज

@overexchange नहीं, यह नहीं है। इस सवाल का मेरा संदर्भ अपने बाधा प्रश्न को फिर से लिखने के बेहतर तरीके के उदाहरण के रूप में था । (यदि आप करते हैं, तो मैं एक उत्तर
लिखूंगा

सबसे अच्छा लघु उत्तर में से एक।
रक्त- HaZaRd

10

थ्रेड पूल प्रबंधित थ्रेड्स का एक संग्रह है जो आमतौर पर एक कतार में आयोजित किया जाता है, जो कार्य कतार में कार्यों को निष्पादित करता है।

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

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

मैं धागे की एक कतार और कार्यों की एक कतार के साथ एक वर्ग बनाकर शुरू करूंगा। फिर एक विधि लागू करें जो एक कार्य को कार्य कतार में जोड़ता है और वहां से आगे बढ़ता है। जाहिर है, आपको थ्रेड पूल में अधिकतम अनुमत थ्रेड्स सेट करना भी संभव बनाना चाहिए।


1

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


1

वास्तविक जीवन उदाहरण;

  1. सुविधा: ऑपरेटिंग सिस्टम
  2. अनुभाग: अनुप्रयोग
  3. लोग: धागे

आपके पास एक सुविधा है जिसमें 12 लोग काम कर रहे हैं। इस सुविधा के 3 खंड हैं। रसोई, टॉयलेट और सुरक्षा। यदि आप थ्रेड पूल तकनीक का उपयोग नहीं करते हैं, तो यह कैसे काम करता है: सभी 12 लोग एक बैठक कक्ष में खड़े होंगे, यदि नए ग्राहक सुविधा से आते हैं और कार्यों के लिए पूछते हैं, तो आप लोगों को समूहों में अलग कर देंगे और उन्हें अपना काम करने के लिए भेज देंगे। , और बैठक कक्ष में वापस आएं। लेकिन, इससे पहले कि वे अपने कर्तव्य पर जाएं, तैयारी का एक चरण है। उन्हें सही वर्दी पहनने, कुछ उपकरणों से लैस करने और उस अनुभाग तक चलने, काम खत्म करने और वापस आने की आवश्यकता है। इसलिए, हर बार जब वे अपनी नौकरी समाप्त कर लेते हैं (थ्रेड समाप्त होता है), तो उन्हें मीटिंग रूम में वापस जाने की आवश्यकता होती है, वर्दी को खोलना पड़ता है, उपकरण निकालते हैं और अगली नौकरी की प्रतीक्षा करनी होती है। ये थ्रेड संदर्भ बनाने के लिए संदर्भित करते हैं, यह ओएस द्वारा मेमोरी आवंटन और ट्रैकिंग जानकारी है।

यदि आप थ्रेड पूलिंग का उपयोग कर रहे हैं, तो, सुबह के समय, आप 6 लोगों को रसोईघर, 2 लोगों को टॉयलेट और 4 लोगों को सुरक्षा प्रदान करेंगे। इसलिए, वे केवल एक दिन में एक बार अपनी तैयारी करेंगे। यहां तक ​​कि अगर रसोई में कोई ग्राहक नहीं है, तो वे 4 लोग किसी भी आगामी कार्यों के लिए, आलसी हो जाएंगे। जब तक किचन बंद नहीं हो जाता (ऐप समाप्त होता है) उन्हें मीटिंग रूम में वापस जाने की आवश्यकता नहीं है। ये 4 लोग किचन ऐप पूल में हैं, और जल्दी से तैयार हैं। लेकिन, आप वादा नहीं कर सकते कि वे पूरे दिन काम कर रहे हैं, क्योंकि रसोई समय-समय पर निष्क्रिय हो सकती है। एक ही तर्क टॉयलेट और सुरक्षा के लिए भी लागू होता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.