मेरी प्रोजेक्ट में मैं एक जावा निष्पादन ढांचा तैयार कर रहा हूं जो क्लाइंट से कार्य अनुरोध प्राप्त करता है। कार्य (अलग-अलग आकार) कार्यों के एक सेट में टूटा हुआ है और फिर प्रसंस्करण के लिए कतारबद्ध है। प्रत्येक प्रकार के कार्य को संसाधित करने के लिए अलग-अलग कतार हैं और प्रत्येक कतार थ्रेडपूल से जुड़ी है। थ्रेडपूल इस तरह से कॉन्फ़िगर किए गए हैं कि इंजन का समग्र प्रदर्शन इष्टतम है।कार्य/कार्य चोरी ThreadPoolExecutor
यह डिज़ाइन हमें प्रभावी ढंग से अनुरोधों को संतुलित करने में मदद करता है और बड़े अनुरोध सिस्टम संसाधनों को छेड़छाड़ नहीं करते हैं। हालांकि कभी-कभी समाधान कुछ अप्रभावी हो जाता है जब कुछ कतार खाली होती हैं और उनके संबंधित थ्रेड पूल निष्क्रिय रहते हैं।
इसे बेहतर बनाने के लिए मैं एक काम/कार्य चोरी तकनीक को लागू करने की सोच रहा था ताकि भारी लोड कतार अन्य थ्रेडपूल से सहायता प्राप्त कर सके। हालांकि इसे अपने स्वयं के निष्पादक को लागू करने की आवश्यकता हो सकती है क्योंकि जावा कई कतारों को थ्रेडपूल से संबद्ध करने की अनुमति नहीं देता है और कार्य चोरी अवधारणा का समर्थन नहीं करता है।
फोर्क/जॉइन के बारे में पढ़ें लेकिन यह मेरी आवश्यकताओं के लिए उपयुक्त नहीं लगता है। इस समाधान को बनाने के लिए कोई सुझाव या वैकल्पिक तरीका बहुत उपयोगी हो सकता है।
धन्यवाद एंडी
आपको अपने सभी CPUs को व्यस्त रखने के बारे में सोचना चाहिए। इससे कोई फर्क नहीं पड़ता कि अगर आप अपने सीपीयू का सबसे अच्छा उपयोग कर रहे हैं तो आपके कुछ धागे निष्क्रिय हैं। –
यदि आपके थ्रेड पूल में आपके पास सीपीयू के रूप में कई धागे हैं, तो कोई भी व्यक्तिगत थ्रेड पूल सभी सीपीयू को "चोरी" कर सकता है भले ही अन्य सभी थ्रेड पूल निष्क्रिय हों। –
@ पीटर Lawrey - यह सच है, लेकिन यदि बहुत सारे पूल हैं, तो आपके पास खराब प्रदर्शन हो सकता है यदि सभी पूल में सभी धागे एक ही समय में काम कर रहे हों। – jtahlborn