कुछ अन्य उत्तरदाताओं की सलाह के विपरीत, कुछ प्रणालियों (निश्चित रूप से उच्च आवृत्ति व्यापार और इसमें कोई संदेह नहीं है कि खोज इंजन जैसे कई अन्य बहुत कम विलंबता सिस्टम), एक थ्रेड को एक सीपीयू कोर (या हाइपर के लिए बाध्यकारी) थ्रेड वाले कोर, एक सिंगल सीपीयू थ्रेड) में भारी प्रदर्शन लाभ हो सकते हैं।
बेवकूफ लेकिन तेजी से खारिज किए गए विचार यह है कि बढ़ते धागे (कारण के भीतर) ऐसे सिस्टम के लिए थ्रूपुट बढ़ाता है। हालांकि, साक्ष्य बढ़ रहा है कि जब सही ढंग से डिज़ाइन किया गया है, तो अधिकांश प्रोसेसिंग के लिए बहुत कम धागे का उपयोग करने वाले समाधान उच्च-समवर्ती समाधानों को काफी हद तक बेहतर कर सकते हैं - कभी-कभी दस, या यहां तक कि एक सौ के कारकों से।
इसका मुख्य कारण संदर्भ स्विचिंग है। संदर्भ स्विचिंग वह प्रक्रिया है जिसमें एक सीपीयू वर्तमान थ्रेड के लिए कैश-रैम (यदि आप भाग्यशाली हैं) या मुख्य रैम (यदि आप नहीं हैं) के लिए अपने कामकाजी माहौल को फ्लश करते हैं, और अगले थ्रेड के लिए कामकाजी माहौल में पढ़ते हैं - और यह सबसे महंगी परिचालनों में से एक है जो कम विलंबता प्रणाली कर सकता है।
यदि आप संदर्भ स्विचिंग को कम करना चाहते हैं जहां कम विलंबता सर्वोपरि है, तो कुछ महत्वपूर्ण प्रक्रियाएं एक कोर या सीपीयू थ्रेड के लिए सबसे अच्छी तरह से प्रतिबंधित हो सकती हैं। जहां कई धागे के लिए उन महत्वपूर्ण थ्रेड-प्रतिबंधित प्रक्रियाओं द्वारा प्रबंधित डेटा को पढ़ने या लिखने के लिए जरूरी है, तो आप "विघटनकर्ता" पैटर्न को देखना चाहेंगे, जो एक रिंग बफर का उपयोग करता है और बहुत तेज़ चतुर चालों को बहुत तेजी से अनुमति देता है साझा डेटा तक पहुंच, जबकि उस डेटा पर एक विशेष लॉक की आवश्यकता होती है (नीचे लिंक)।
जावा में ओएस-स्वतंत्र तरीके से थ्रेड एफ़िनिटी (सीपीयू बाइंडिंग) कार्यों को प्राप्त करने के लिए, आप पीटर लॉरी की जावा थ्रेड एफ़िनिटी लाइब्रेरी का उपयोग कर सकते हैं, जो नीचे भी लिंक किया गया है। यह भी ध्यान दें कि पीटर एक पाठक धागे को एक हाइपर-थ्रेडेड कोर के एक हाइपर-थ्रेड से बांधता है, और एक लेखक को थ्रेड करता है, एक चाल जिसे मैं सराहनीय लाभों पर विचार कर सकता हूं (हालांकि मैंने इसे आजमाया नहीं है)।
बार्नी
http://lmax-exchange.github.io/disruptor/
https://github.com/peter-lawrey/Java-Thread-Affinity/wiki/How-it-works
स्रोत
2013-07-31 16:05:20
आप आप चाहते हैं ऐसा करने जा करना चाहते हैं? कई मामलों में, ओएस और/या जेवीएम शेड्यूलिंग निर्णय लेने के लिए बेहतर है। –
परीक्षण उद्देश्यों के लिए यह और अधिक है कि मैं इसे करना चाहता हूं। – user381261