2011-10-28 16 views
6

मैं जावा में मोबाइल एंड्रॉइड आधारित उपकरणों के लिए एक वेबसर्वर लिख रहा हूं।जावा/एंड्रॉइड - फास्ट बाइटबफर पार्सिंग

यह वेबसर्वर एकल-थ्रेडेड है और nginx, node.js और इसी तरह के विचार के पीछे विचार का पालन करें: एकाधिक थ्रेडों को न केवल एक घटना लूप में एसिंक ऑपरेशन का उपयोग करें।

एक बहु-थ्रेडेड वेबसर्वर का उपयोग करते समय x86 हालिया सीपीयू पर बेहतर प्रदर्शन दे सकता है, बांह आधारित सिंगल कोर सीपीयू पर बहुत अधिक काम करने की आवश्यकता होगी।

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

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

मेरा सवाल है, बाइट बफर पार्सिंग के लिए कौन सी विधि तेज है?

मैंने देखा है कि बाइटबफर विधि प्राप्त करने का समर्थन करता है, जो एक बाइट तक पहुंच प्रदान करता है और कर्सर को आगे बढ़ाता है, सरणी विधि का समर्थन करता है, जो बैकिंग सरणी लौटाता है, इसलिए मेरा प्रश्न यह है कि कौन सी विधि तेज है?

मैं सीधे बैक किए गए सरणी पर काम कर सकता हूं, या मुझे टालना चाहिए और उपयोग करना चाहिए?

मैं बाइटबफर का पुन: उपयोग करने के लिए बाइटबफरपूल को कार्यान्वित करना चाहता हूं, मैं इसे थ्रेड-जागरूक कर दूंगा, नीचे पढ़ सकता हूं, क्या यह एक मुद्दा हो सकता है?

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

इन मूर्खतापूर्ण सवाल के लिए क्षमा करें, लेकिन मैं जावा चश्मा पता नहीं है और आंतरिक जावा सामान पता नहीं है, तो मैं infos :)

किसी व्यक्ति ने एक संकेत दे सकते हैं की जरूरत है? :)

पुनश्च: obiviously, नहीं सभी ऑपरेशन एक do-सामान-विराम जारी रखने के-रिटर्न ढंग से संभाला जा सकता है, तो मैं एक ThreadPool लागू करेंगे धागा निर्माण दंड

उत्तर

1

से बचने के लिए Netty आज़मा कर देखें। आप थ्रेडिंग मॉडल को नियंत्रित कर सकते हैं और आप जो भी चाहते हैं उसे लागू कर सकते हैं।

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