2012-02-17 9 views
11

निराशाजनक रूप से, हौटडिस्पेच की वेबसाइट इसे "थ्रेड पूलिंग और एनआईओ इवेंट अधिसूचना फ्रेमवर्क एपीआई" के रूप में वर्णित करती है।जावा के एक्जिक्यूटर्स से HawtDispatch अलग कैसे है? (और नेटटी)

चलो पहले 'थ्रेड पूलिंग' भाग लें। जावा द्वारा प्रदान किए गए अधिकांश निष्पादक मूल रूप से थ्रेड पूल भी हैं। HawtDispatch अलग कैसे है?

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

उत्तर

17

HawtDispatch को एक सिस्टम विस्तृत निश्चित आकार थ्रेड पूल के रूप में डिज़ाइन किया गया है। यह औजार प्रदान करता है जावा निष्पादकों के 2 जायके:

  • वैश्विक डिस्पैच कतार: प्रस्तुत Runnable वस्तुओं समवर्ती निष्पादित (आप एक Executors.newFixedThreadPool(n) निष्पादक का उपयोग कर एक ही प्रभाव प्राप्त) कर रहे हैं
  • सीरियल डिस्पैच कतार: प्रस्तुत Runnable वस्तुओं क्रमानुसार क्रियान्वित कर रहे हैं (आप एक Executors.newSingleThreadExecutor() निष्पादक का उपयोग कर एक ही प्रभाव)

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

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

नेटटी की तुलना में, हौटडिस्पेच वास्तव में सॉकेट डेटा को प्रोसेस करने के लिए एक ढांचा नहीं है। यह सॉकेट डेटा को एन्कोड/डीकोड, बफर और संसाधित करने के लिए एक ढांचा प्रदान नहीं करता है। यह सब करता है जब उपयोगकर्ता को गैर-अवरुद्ध सॉकेट पर पढ़ा या लिखा जा सकता है तो रननेबल उपयोगकर्ता को निष्पादित किया जाता है। सॉकेट डेटा को वास्तव में पढ़ने/लिखने के लिए यह आपके ऊपर आवेदन है।

+3

धन्यवाद @ हिराम। मुझे उम्मीद है कि आप उन लोगों को पेश करने के लिए हॉटडिस्पेच दस्तावेज़ों का विस्तार करने के लिए थोड़ा विस्तार करें जो ऐप्पल के libdispatch के बारे में कुछ नहीं जानते हैं। वाकई, यह विवरण एक अच्छी शुरुआत है। शायद कुछ ऐसा जो एचडी के लाभ पर केवल निष्पादकों का उपयोग करता है। – Shahbaz

+0

@ शाहबाज जीसीडी के पास पूल के आकार को समायोजित करने का विशेषाधिकार है, इस पर निर्भर करता है कि कितने सीपीयू कोर उपलब्ध हैं और वर्तमान में वे कितने व्यस्त हैं। मैंने इसे थ्रेड गिनती में वृद्धि देखी है जब कतार में कई नौकरियां I/O बाध्य हैं, इसलिए CPU को व्यस्त रखना। हालांकि HawtDispatch ऐसा प्रतीत नहीं होता है। – adib

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