10

निम्नलिखित सही है?विघटन पैटर्न का उपयोग कब और जब काम के साथ स्थानीय भंडारण चोरी?

  • disruptor pattern के बाद से है कि विवाद के बिना एक से अधिक उपभोक्ताओं का उपयोग कर parallelized किया जा सकता है, अगर प्रत्येक प्रविष्टि कई मायनों में संसाधित करने के लिए (संचालन या एनोटेशन कब) है बेहतर समानांतर प्रदर्शन और scalability है।
  • इसके विपरीत, work stealing (यानी प्रविष्टियों स्थानीय रूप से भंडारण और अन्य धागे से प्रविष्टियां चोरी) यदि प्रत्येक प्रविष्टि, केवल एक ही तरह से संसाधित करने के लिए disjointly disruptor में एक से अधिक थ्रेड पर प्रविष्टियों वितरण के बाद से है बेहतर समानांतर प्रदर्शन और scalability है पैटर्न विवाद का कारण बनता है।


मेरे (और disruptor पैटर्न अभी भी इतना अन्य लॉकसेल बहु निर्माता बहु उपभोक्ता कतार की तुलना में तेजी (जैसे from boost) जब कई उत्पादकों (यानी CAS operations) शामिल कर रहे हैं? है) विस्तार में स्थिति:

, एक प्रवेश कई नए प्रविष्टियों, जो अंततः संसाधित किया जाना चाहिए उत्पादन कर सकते हैं का संसाधन भी। प्रदर्शन की सर्वोच्च प्राथमिकता है, एफआईएफओ आदेश में संसाधित प्रविष्टियों की दूसरी प्राथमिकता है।

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

विघटन पैटर्न का उपयोग करने से फीफो ऑर्डर की गारंटी होगी। लेकिन धागे पर प्रविष्टियों को वितरित नहीं करना काम के चोरी के साथ स्थानीय फीफो के मुकाबले ज्यादा उच्च विवाद (उदाहरण के लिए एक पाठ कर्सर पर सीएएस) का कारण बनता है (प्रत्येक थ्रेड का थ्रूपुट उसी के बारे में है)?


संदर्भ मैं the standard technical paper on the disruptor (अध्याय 5 + 6) में

प्रदर्शन परीक्षणों पाया है संबंध तोड़ना काम वितरण को कवर नहीं है।

https://groups.google.com/forum/?fromgroups=#!topic/lmax-disruptor/tt3wQthBYd0 केवल संदर्भ मैं disruptor + चोरी काम पर पाया गया है। यह बताता है कि यदि कोई साझा राज्य है तो प्रति थ्रेड कतार नाटकीय रूप से धीमी है, लेकिन विस्तार से नहीं जाती है या क्यों समझाती है। मुझे संदेह है कि यह वाक्य मेरी स्थिति पर लागू होता है:

  • साझा स्थिति को लॉकलेस हैश तालिका के साथ हल किया जा रहा है;
  • उपभोक्ताओं के बीच विवादों को विचलित रूप से वितरित करना;
  • कार्य चोरी के अलावा, प्रत्येक धागा केवल अपनी स्थानीय कतार में पढ़ता है और लिखता है।

उत्तर

12

अद्यतन - अधिकतम प्रदर्शन के लिए सामने की रेखा ऊपर: आपको विघटनकर्ता और कार्य चोरी के लिए बेवकूफ वाक्यविन्यास में लिखना होगा, और फिर बेंचमार्क।

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

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

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

बेशक, आप प्रत्येक दृष्टिकोण को बेहतर तरीके से अनुकूलित करने के लिए अपना कार्यान्वयन बदल सकते हैं।

आपके मामले में, मैं इस समस्या को अलग तरह की संरचना अगर आप Disruptor उपयोग करना चाहता था होगा। इस तरह चित्र के बहुत सारे के लिए SEDA ऊपर देखो - आम तौर पर आप एक ही धागे राज्य के मालिक हैं और काम की है कि धागा के माध्यम से सभी कार्य पारित होने से साझा राज्य को खत्म करेगा। इसमें बहुत से लाभ हो सकते हैं, लेकिन फिर, वास्तव में आपके कार्यान्वयन के लिए नीचे है।

कुछ और शब्दाडंबर:

  • Disruptor - बहुत उपयोगी है जब चरणों के सख्त आदेश की आवश्यकता है, अतिरिक्त लाभ जब सभी कार्य एक सुसंगत लंबाई जैसे के होते हैं: बाहरी सिस्टम पर कोई अवरुद्ध, और प्रसंस्करण के बहुत समान राशि प्रति कार्य इस परिदृश्य में, आप मान सकते हैं कि सभी धागे सिस्टम के माध्यम से समान रूप से काम करेंगे, और इसलिए प्रत्येक एन संदेशों को संसाधित करने के लिए एन धागे की व्यवस्था करें। मैं विच्छेदन को SEDA- जैसे सिस्टम को लागू करने के लिए एक प्रभावी तरीका के रूप में सोचना पसंद करता हूं जहां धागे प्रक्रियाओं को संसाधित करते हैं। आप निश्चित रूप से एक चरण के साथ एक आवेदन कर सकते हैं और प्रत्येक चरण में एक ही काम करने वाले कई समांतर इकाइयां हैं, हालांकि यह वास्तव में मेरे विचार में बिंदु नहीं है। यह पूरी तरह से साझा राज्य की लागत से बच जाएगा।
  • काम चोरी - इस का उपयोग जब कार्य एक विविध अवधि के हैं और संदेश प्रसंस्करण के आदेश में इस धागे कि स्वतंत्र हैं और पहले से ही उनके संदेशों का सेवन किया है किसी अन्य कार्य कतार से प्रगति जारी रखने के लिए अनुमति देता है के रूप में, महत्वपूर्ण नहीं है। इस तरह यदि उदाहरण के लिए आपके पास आईओ पर 10 धागे और 1 अवरुद्ध हैं, तो शेष अभी भी अपनी प्रसंस्करण पूरी कर लेंगे।
+0

अपने जवाब के लिए धन्यवाद। कुछ प्रतिमान ध्वनि के आधार पर एक भेद बनाओ, दुर्भाग्य से मुझे नहीं पता कि संदेश फोकस बनाम कार्य फोकस का अंतर क्या है। एक उपभोक्ता उनके हैश मान के साथ में (एकाधिक) disruptor (रों) प्रविष्टियों annotates, एक और उपभोक्ता एक ध्वज है कि क्या वे में किया गया है के साथ स्थानीय हैश तालिका में उन्हें डालता है और annotates प्रविष्टियों: – DaveFar

+0

मैं disruptors के साथ मेरी समस्या का समाधान डिजाइन किया हैश टेबल पहले से ही है। यह समाधान तेजी से हो सकता है, लेकिन लॉकलेस हैश तालिका के रूप में धागे की संख्या में रैखिक रूप से स्केल नहीं करता है।एक और विघटनकर्ता, सभी नव निर्मित वस्तुओं के लिए एफआईएफओ को लागू करने के लिए कई उत्पादक हैं, इसलिए मुझे यकीन नहीं है कि कोई विघटनकर्ता कार्यान्वयन के इस हिस्से में सुधार करता है या नहीं। – DaveFar

+0

बीटीडब्ल्यू, मेरे कार्य निश्चित रूप से विभिन्न अवधि के हैं, लेकिन संदेश प्रसंस्करण का क्रम कुछ हद तक महत्वपूर्ण है ... – DaveFar

संबंधित मुद्दे