थ्रेड पूल

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

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

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

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

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

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

यह भी देखें

 * अतुल्यकालिक (कंप्यूटर प्रोग्रामिंग)
 * ऑब्जेक्ट पूल पैटर्न
 * समवर्ती पैटर्न
 * ग्रैंड सेंट्रल डिस्पैच
 * समानांतर विस्तार
 * समानांतरीकरण
 * सर्वर फार्म
 * मंचित घटना-संचालित वास्तुकला

बाहरी संबंध

 * "Query by Slice, Parallel Execute, and Join: A Thread Pool Pattern in Java" by Binildas C. A.
 * "Thread pools and work queues" by Brian Goetz
 * "A Method of Worker Thread Pooling" by Pradeep Kumar Sahu
 * "Work Queue" by Uri Twig: C++ code demonstration of pooled threads executing a work queue.
 * "Windows Thread Pooling and Execution Chaining"
 * "Smart Thread Pool" by Ami Bar
 * "Programming the Thread Pool in the .NET Framework" by David Carmona
 * "Creating a Notifying Blocking Thread Pool in Java" by Amir Kirsh
 * "Practical Threaded Programming with Python: Thread Pools and Queues" by Noah Gift
 * "Optimizing Thread-Pool Strategies for Real-Time CORBA" by Irfan Pyarali, Marina Spivak, Douglas C. Schmidt and Ron Cytron
 * "Deferred cancellation. A behavioral pattern" by Philipp Bachmann
 * "A C++17 Thread Pool for High-Performance Scientific Computing" by Barak Shoshany