2016-07-19 5 views
8

पर मैं वर्तमान में एक एंड्रॉयड आवेदन की एक subpart के लिए एक AirPlay रिसीवर पर काम कर रहा हूँ। मैं निम्नलिखित ढांचे का उपयोग कर रहा:जावा या C/C++ में डिकोडिंग एयरप्ले पैकेट एंड्रॉयड

https://github.com/pentateu/DroidAirPlay

इस काम करता है जबकि इस तरह के miPad के रूप में कुछ मध्य रेंज उपकरणों पर महान है, हम एक कम कल्पना कस्टम डिवाइस पर इस चलाने के लिए की जरूरत है। कस्टम डिवाइस मीलपैड की तुलना में 10x से 20x धीमी गति से एयरप्ले पैकेट को डीकोड कर रहा है। नतीजतन, ऑडियो पैकेट समय सिंक्रनाइज़ेशन खो देते हैं और पैकेट को डीकोड करने के लिए किए गए समय के कारण, ऑडियो कभी भी सिंक नहीं हो सकता है।

मैं Play Store पर कुछ अन्य एयरप्ले रिसीवर ऐप्स देख रहा था और जो कुछ मैं देख सकता हूं उससे वे एयरप्ले रिसीवर पक्ष के लिए शियरपोर्ट (https://github.com/abrasive/shairport) पर आधारित होते हैं।

** नोट: ** Shairport आधारित चौखटे कम अंत डिवाइस पर तुल्यकालन मुद्दे पीड़ित नहीं है।

ढांचे मैं उपयोग कर रहा हूँ भारी अलग से है कि यह जावा में लिखा है Shairport ढांचे पर आधारित है।

डिकोडिंग डेटा के लिए, C/C++ दूर जावा की तुलना में बेहतर है?

यदि हां, तो एक सी या सी ++ कार्यान्वयन का उपयोग NDK मुझे प्रदर्शन करने के लिए एक बड़ा बढ़ावा देने के माध्यम से DroidAirPlay ढांचे की डिकोडिंग हिस्सा निर्देशन करेंगे?

अग्रिम धन्यवाद

मैट

उत्तर

0

हालांकि यह सच है कि जावा बाईटकोड कि एक आभासी मशीन में चलता है करने के लिए संकलित, यह जरूरी धीमी (या तेज) एक देशी रूप संकलित निष्पादन से नहीं हो सकता है, चाहे सी/सी ++ या नहीं। यह सब कार्यक्रम पर निर्भर करता है!

वहाँ कई कारणों से क्यों इस मामले में जावा धीमी हो सकती है:

  • डिकोडिंग कार्यान्वयन हो सकता है सिर्फ खराब कोडित/अनुकूलित किया? (जो वास्तव में जावा की गलती नहीं है)
  • जावा कंपाइलर जेवीएम के लिए उप-इष्टतम कोड उत्पन्न कर सकता है।
  • जावा की कुछ भाषा संरचनाएं यहां गति/संसाधन मांगों के लिए बहुत धीमी हैं।
  • जेवीएम सिर्फ एक और अमूर्त परत है और अपराधी
  • कचरा संग्रह उस पर है ?!

(मैं यहाँ ध्यान दें कि मैं जावा पर एक विशेषज्ञ नहीं हूँ है!)

हालांकि, मैं अभी भी अब तक के रूप में जावा आंतरिक रूप से धीमी से सी या सी ++ कॉल करने के लिए जाना नहीं होता। मुझे यकीन है कि आप और इंटरनेट पर एक भाषा की तुलना किसी अन्य भाषा की तुलना कर सकते हैं, और कुछ एक निश्चित डिग्री (गर्व और अहंकार से बाहर) का दावा करते हैं। लेकिन उन परीक्षणों केवल विशिष्ट मामलों, आमतौर पर विशिष्ट पहलुओं एक बड़ा भाषा का परीक्षण कर रहे हैं (उदाहरण के लिए हैश नक्शा देखने प्रदर्शन!)।

LLVM एक three part blog post सी पर और क्यों अपरिभाषित व्यवहार संकलक चलाने के समय सुरक्षा जाँच का निष्कर्ष निकालते या यह निर्णय उस के बाद मैं पूरी तरह से अनदेखी i + 1 हमेशा आता है की कीमत पर अभी भी सही लेकिन अधिक कुशल कोड उत्पन्न करने के लिए अनुमति देता है के लिए किया था पूर्णांक अतिप्रवाह का अस्तित्व। यदि प्रोग्रामर सावधान नहीं है, तो इसका विनाशकारी परिणाम हो सकता है।

खुद Bjarne के शब्दों में Abstraction and the C++ machine model में:

सी ++ एक सिस्टम प्रोग्रामिंग भाषा होने के लिए बनाया गया था और एम्बेडेड सिस्टम प्रोग्रामिंग और के बाद से प्रोग्रामिंग के अन्य संसाधन विवश प्रकार के लिए इस्तेमाल किया गया है शुरुआती दिन

इस तरह, मेरा मानना ​​है कि सी और सी ++ को इस अपरिभाषित व्यवहार और उस पर कम प्रतिबंधों के कारण जावा से आगे धकेल दिया जा सकता है। (और इनलाइन असेंबली बिट भी है, लेकिन यह कड़ाई से सी नहीं है!)

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